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
}