Autohotkey - 匹配字符串中的模式

时间:2016-08-13 19:05:40

标签: regex string match autohotkey

我需要弄清楚如何从类似下面的字符串中提取模式的异常(例如: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

但没有......也许我在语法上做错了什么?

2 个答案:

答案 0 :(得分:0)

试试这个 - g)([A-Z]{3}\|[A-Z]{3})

g)位应将正则表达式匹配选项设置为“全局”,以便捕获所有匹配而不是第一个匹配。

来自AHK docs

答案 1 :(得分:0)

来自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
}