我希望正则表达式匹配http://www.example.com
,example.co.uk
,en.example.com
等网址。我一直在使用^(https?://|www\.|)[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?$
并在http://regexpal.com/上对其进行测试,它似乎完全正常。
然而,当我把它放在autohotkey中时,它似乎与example
和example.something
之类的其他内容相匹配,但它不应该。然后它与example.com/something
和example.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
答案 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\-\.]+
可能无法匹配。但是,如果正确执行正则表达式引擎,则不应该这样。也许你需要逃避+
,|
或某些此类引擎有不同的约定(即sed
和pcre
对+
和{(
有不同的看法{1}}如果我没弄错的话。