正则表达式匹配非网址

问题描述 投票:0回答:2

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

这效果很好:

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

与 URL 匹配得很好,但在这一行失败了:

“我知道,但你的名字不在名单上,看... http://screencast.com/t/ccccccc

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

怎么了?

regex url replace hyperlink text-parsing
2个回答
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+)?

示范

当然,这只是一个近似值。要获得更详细和完整的模式,您可能应该阅读寻找完美的 URL 验证正则表达式,其中作者提供了许多模式并展示了它们的优点和缺点。


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

现场演示

© www.soinside.com 2019 - 2024. All rights reserved.