为了在评论系统中的帖子上执行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]部分。
怎么了?
答案 0 :(得分:1)
与协议(http://
或https://
)匹配的模式部分是可选的。此外,模式的一部分旨在匹配URL的查询(?
之后的URL部分)。
纠正这两个问题,它应该有效:
(https?:\/\/)([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\??(&?([a-zA-Z0-9]*=[a-zA-Z0-9]*))*
但我们可以稍微改善一下:
(https?://)[\da-z.-]+(\.[a-z0-9-]+)+(\:\d+)?)(/[\w.-]*)*(\?\S+)?
当然,这是近似的。对于更详细和完整的模式,您应该阅读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]*)&?)*\/?