Autohotkey - 匹配字符串中的模式
Autohotkey - match a pattern in a string
我需要弄清楚如何从如下所示的字符串中提取模式的所有出现次数(例如:AAA | AAA):
InputString := "PGA|MGA v _ 914:00 x a: EDA|EFG v 7 913:42 x 5:: PFD|GRM"
RegexMatch(InputString, "([A-Z]{3})\|([A-Z]{3})", Match)
strMessage := "InputString = '" . InputString . "'"
strMessage .= "`nName = '" . Match1 . "'"
MsgBox, % strMessage
我试过这段代码,但很明显它不正确。
我也试过:
InputString := "PGA|MGA v _ 914:00 x a: EDA|EFG v 7 913:42 x 5:: PFD|GRM"
Pos:=RegExMatch( InputString, "g)([A-Z]{3})\|([A-Z]{3})", Match)
Msgbox % Match1
但是没有...也许我在语法上做错了什么?
试试这个 -- g)([A-Z]{3}\|[A-Z]{3})
g)
位应将正则表达式匹配选项设置为 'global',以便捕获所有匹配项,而不仅仅是第一个匹配项。
来自AHK docs
Link 来自 RegExMatch 页面上的帮助文档 Global matching and Grep (forum link)。
我发现这个 page 更有帮助!
尝试:
InputString := "PGA|MGA v _ 914:00 x a: EDA|EFG v 7 913:42 x 5:: PFD|GRM"
MsgBox % Format("Match #1 {1:}`nMatch #2 {2:}`nMatch #3 {3:}"
, RegExMatchAll(InputString, "([A-Z]{3}[|][A-Z]{3})")*)
; Return Array of all Matches found!
RegExMatchAll(Input, Pattern, Pos=1) {
matches := []
While Pos := RegExMatch(Input, Pattern, m,Pos+StrLen(m))
matches.push(m)
return matches
}
我需要弄清楚如何从如下所示的字符串中提取模式的所有出现次数(例如:AAA | AAA):
InputString := "PGA|MGA v _ 914:00 x a: EDA|EFG v 7 913:42 x 5:: PFD|GRM"
RegexMatch(InputString, "([A-Z]{3})\|([A-Z]{3})", Match)
strMessage := "InputString = '" . InputString . "'"
strMessage .= "`nName = '" . Match1 . "'"
MsgBox, % strMessage
我试过这段代码,但很明显它不正确。
我也试过:
InputString := "PGA|MGA v _ 914:00 x a: EDA|EFG v 7 913:42 x 5:: PFD|GRM"
Pos:=RegExMatch( InputString, "g)([A-Z]{3})\|([A-Z]{3})", Match)
Msgbox % Match1
但是没有...也许我在语法上做错了什么?
试试这个 -- g)([A-Z]{3}\|[A-Z]{3})
g)
位应将正则表达式匹配选项设置为 'global',以便捕获所有匹配项,而不仅仅是第一个匹配项。
来自AHK docs
Link 来自 RegExMatch 页面上的帮助文档 Global matching and Grep (forum link)。
我发现这个 page 更有帮助!
尝试:
InputString := "PGA|MGA v _ 914:00 x a: EDA|EFG v 7 913:42 x 5:: PFD|GRM"
MsgBox % Format("Match #1 {1:}`nMatch #2 {2:}`nMatch #3 {3:}"
, RegExMatchAll(InputString, "([A-Z]{3}[|][A-Z]{3})")*)
; Return Array of all Matches found!
RegExMatchAll(Input, Pattern, Pos=1) {
matches := []
While Pos := RegExMatch(Input, Pattern, m,Pos+StrLen(m))
matches.push(m)
return matches
}