Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 自动热键:正则表达式的行为不符合预期_Regex_Autohotkey - Fatal编程技术网

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可以“劫持”你的剪贴板,下面是一个例子。尝试从新闻中复制一些内容并粘贴到某个地方。谢谢!原来这是一个转义问题。我已将转义字符改为/,因此我需要其中两个字符才能使正则表达式正常工作。