Regex 自动热键:正则表达式的行为不符合预期
我希望正则表达式匹配网址,例如Regex 自动热键:正则表达式的行为不符合预期,regex,autohotkey,Regex,Autohotkey,我希望正则表达式匹配网址,例如http://www.example.com,example.co.uk,en.example.com等。我一直在使用^(https?://www\.\)[a-zA-Z0-9\-\.]+.[a-zA-Z]{2,3}(/\S*)?$并对其进行测试,它似乎完全正常工作 If RegExMatch(Clipboard, "^(https?://|www\.|)[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?$") Msgbox, it
http://www.example.com
,example.co.uk
,en.example.com
等。我一直在使用^(https?://www\.\)[a-zA-Z0-9\-\.]+.[a-zA-Z]{2,3}(/\S*)?$
并对其进行测试,它似乎完全正常工作
If RegExMatch(Clipboard, "^(https?://|www\.|)[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?$")
Msgbox, it matches
else
Msgbox, it doesn't
然而,当我把它放在自动热键中时,它似乎与额外的东西相匹配,比如示例
和示例。然后它不匹配像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
匹配URL、主机名等是一个多次解决的问题;我建议你使用一些标准的正则表达式。也许是有帮助的
如果将正则表达式作为练习编写:
它真的与字符串示例匹配吗?您坚定地断言字符串包含
,因此它永远不应该包含。也许AHK没有逃脱标准的方法
如果[a-zA-Z]{2,3}
应该匹配顶级域,那么您忘记了.info
如果您不小心将某些空白复制到剪贴板中,您可能希望在结尾和开头允许任意长度的空白字符串。也就是说,^\s*您的regex thingy\s*$
示例。某些内容
是匹配项,因为它以空字符串开头,后跟一个或多个字母数字序列(或-
,
),一个
,两个或三个字母,并以非空白序列结尾
如果整个子字符串example.com
与组[a-zA-Z0-9\-\.]+
匹配,则example.com/something.html
可能无法匹配。但是,如果正则表达式引擎实现正确,则不应该这样做。也许您需要避开+
,|
或一些类似的情况,引擎在这方面有不同的约定(即sed
和pcre
对+
和(
如果我没弄错的话。我甚至会在剪贴板中允许不只是空白,还允许其他噪音或环绕URL。换句话说,我只需删除^
和$
。如果你复制内容,你永远不知道浏览器或文字处理程序实际上会做什么,特别是如果它们来自Microsoft;)例如,JavaScript可以“劫持”你的剪贴板,下面是一个例子。尝试从新闻中复制一些内容并粘贴到某个地方。谢谢!原来这是一个转义问题。我已将转义字符改为/,因此我需要其中两个字符才能使正则表达式正常工作。