AUTOHOTKEY:RegExMatch()一系列数字和字母

时间:2015-06-18 09:09:00

标签: regex match autohotkey

我在http://www.regextester.com/

中测试了我的正则表达式
([0-9]{4,4})([A-Z]{2})([0-9]{1,3})

它正如我想要的那样与以下字符串完美匹配。

1234AB123
2000AZ20
1000XY753

但是当我在Autohotkey中尝试时,我得到0结果

test := RegExMatch("2000SY155","([0-9]{4,4})([A-Z]{2})([0-9]{1,3})")

MsgBox %test%

测试:

  • 前4个字符必须是数字
  • 接下来的2个字符必须是大写字母
  • 接下来1到3个字符必须是数字

2 个答案:

答案 0 :(得分:1)

你需要很多()

这是正确的实施:

test := RegExMatch("1234AB123","[0-9]{4,4}([A-Z]{2})[0-9]{1,3}")

编辑:

所以我注意到你想要这个模式匹配,但你并没有真正说出来。

我能够提出的符合您要求的内容,它可能不是最佳解决方案,但它有效:

test := RegExMatch("1234AB567","^[0-9]{4,4}[A-Z]{2}(?![0-9]{4,})[0-9$]{1,3}")

打破它:

  

RegExMatch(Haystack,NeedleRegEx [,UnquotedOutputVar ="",StartingPosition = 1])

     

Circumflex( ^ )和美元符号( $ )被称为锚点,因为   他们不会消费任何角色;相反,他们将模式联系起来   被搜索字符串的开头或结尾。

     

^ 可能会出现在模式的开头,要求匹配发生在   一行的开头。例如, **   **匹配abc123但不匹配123abc。

     

$ 可能会出现在模式的末尾,要求匹配发生在>一行结束。例如, abc $ 匹配123abc但不匹配abc123。

因此,通过添加Circumflex,我们要求我们的模式[0-9]{4,4}位于我们的干草堆的开头。

  

前瞻和后瞻断言:群组(?= ...),(?!...)是   称为断言,因为他们要求满足条件,但不要   消耗任何字符。

     

(?!...)是否定前瞻,因为它要求指定的模式不存在。

我们的下一个模式是寻找两个大写字母[A-Z]{2}(?![0-9]{4,}),后面没有四个或更多数字字符。

最后我们的最后一个模式需要匹配一到三个数字字符作为我们Haystack中的最后一个字符[0-9$]{1,3}

答案 1 :(得分:0)

test := RegExMatch("2000SY155","([0-9]{4,4})([A-Z]{2})([0-9]{1,3})")
MsgBox %test%
  

但是当我在Autohotkey中尝试时,我得到0结果

消息框正确地为我返回1,这意味着您的初始脚本可以正常使用我的版本。通常情况下,大括号在RegExes中没有问题,你可以随心所欲地放在那里......也许你的AutoHotkey版本已经过时了?