Autohotkey:正则表达式不按预期运行

时间:2014-02-15 13:16:42

标签: regex autohotkey

我希望正则表达式匹配http://www.example.comexample.co.uken.example.com等网址。我一直在使用^(https?://|www\.|)[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?$并在http://regexpal.com/上对其进行测试,它似乎完全正常。

然而,当我把它放在autohotkey中时,它似乎与exampleexample.something之类的其他内容相匹配,但它不应该。然后它与example.com/somethingexample.com/something.html之类的内容不匹配。

If RegExMatch(Clipboard, "^(https?://|www\.|)[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?$")
    Msgbox, it matches
else
    Msgbox, it doesn't

1 个答案:

答案 0 :(得分:1)

匹配网址,主机名等是一个多次解决的问题;我建议你改编一些标准​​的正则表达式。也许SO question: Fully qualified domain name validation很有帮助。


如果您正在将正则表达式作为练习编写:

它是否真的与字符串example匹配?你坚决断言字符串包含.,所以它永远不应该。也许AHK没有逃脱.标准方式?

如果[a-zA-Z]{2,3}与顶级域名匹配,则您忘记了.info

如果您不小心将某些字符串复制到剪贴板中,您可能希望在结尾处开始允许任意长度的空格字符串。即^\s*your-regex-thingy\s*$

example.something是一个匹配项,因为它以空字符串开头,后跟一个或多个字母数字序列(或-.),一个. ,2或3个字母,以非空格序列结束。

如果整个子字符串example.com/something.html与组example.com匹配,则

[a-zA-Z0-9\-\.]+可能无法匹配。但是,如果正确执行正则表达式引擎,则不应该这样。也许你需要逃避+|或某些此类引擎有不同的约定(即sedpcre+和{(有不同的看法{1}}如果我没弄错的话。