([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%
测试:
答案 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版本已经过时了?