我正在使用John Gruber在此daringfireball article中描述的模式来自动链接用户评论中的网址。
我在PHP中使用它来匹配URL,并希望它匹配单个TLD而没有www
且没有尾部斜杠,但它似乎不起作用。
这是模式(可以在上面的文章中更详细地看到):
$pattern = '#(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4})(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”‘’]))#';
具体来说,我正在看这个特定的子模式:[a-z0-9.\-]+[.][a-z]{2,4}
此子模式单独工作,但作为较大模式的一部分,它与google.com
不匹配。
答案 0 :(得分:2)
[a-z0-9.\-]+[.][a-z]{2,4}
按预期工作,但该模式的其余部分至少需要1个后续字符:
google.com/
google.com?lang=en-us
google.com#!foo/bar
等
你可以尝试允许尾部是可选的,但它可能反过来给你假阳性而不是排除假阴性:
$pattern = '#...“”‘’])?)#'; # '...' for brevity
# ^
答案 1 :(得分:0)