【发布时间】:2019-06-12 12:43:00
【问题描述】:
我有以下正则表达式
(?!:\/\/)([a-zA-Z0-9-_]+\.)*[a-zA-Z0-9][a-zA-Z0-9-_]+\.[a-zA-Z]{2,11}?$
它可以识别 moo.foo 之类的域,但无法识别以下情况:
-
festelån.net有一些 unicode 字符 -
http://hellöthere.com/或存在 http 或 https 协议以及 slashes 的情况。
如何修改它以识别这些情况?
我不擅长正则表达式感谢您的帮助。
如果你想玩,这里是 online real time 示例的编辑。
【问题讨论】:
-
(?!:\/\/)表示与封闭的字符不匹配,这意味着://不会成为捕获的一部分,this alone should not break the regex。最后一个示例不匹配(除了 unicode)的原因是,以$结尾的正则表达式意味着它必须位于字符串的末尾,这意味着尾随的/阻止了匹配。[\p{L}\p{N}]可以用来代替[a-z0-9]以匹配任何 unicode 字母或数字(\p{L}是任何字母,\p{N}是任何数字) -
10x 用于解释@SamRockett。在您的示例中,此模式
(?!:\/\/)([\p{L}\p{N}\-_]+\.)*[\p{L}\p{N}\][\p{L}\p{N}\-_]+\.[a-zA-Z]{2,11}}捕获了我正在寻找的内容,但在使用preg_match的 php 中却没有。虽然应该还是PCRE
标签: php regex string search pcre