正则表达式匹配非网址

时间:2014-01-05 17:54:21

标签: regex

为了在评论系统中的帖子上执行str_replace()并使用活动的可点击链接替换裸链接,我编写了一个匹配URL的正则表达式。

这很有效:

(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\??(([a-zA-Z0-9]*=[a-zA-Z0-9]*)&?)*\/?

很好地匹配网址,但在这一行上失败了:

“我知道,但您的名字不在列表中,请参阅... http://screencast.com/t/ccccccc

匹配[see ... http]部分。

怎么了?

2 个答案:

答案 0 :(得分:1)

与协议(http://https://)匹配的模式部分是可选的。此外,模式的一部分旨在匹配URL的查询(?之后的URL部分)。

纠正这两个问题,它应该有效:

(https?:\/\/)([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\??(&?([a-zA-Z0-9]*=[a-zA-Z0-9]*))*

Demonstration

但我们可以稍微改善一下:

(https?://)[\da-z.-]+(\.[a-z0-9-]+)+(\:\d+)?)(/[\w.-]*)*(\?\S+)?

Demonstration

当然,这是近似的。对于更详细和完整的模式,您应该阅读In search of the perfect URL validation regex,其中作者提供了许多模式并展示了它们的优点和缺点。

答案 1 :(得分:0)

(https?:\/\/)([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\??(([a-zA-Z0-9]*=[a-zA-Z0-9]*)&?)*\/?

Live demo