【发布时间】:2009-11-25 01:28:27
【问题描述】:
我从 db 收到一段代码,其中偶尔包含 url,例如,http://site.tld/lorem.ipsum/whatever
现在我想用一个辅助方法把它变成用户可以点击的漂亮链接。如:
<a href="http://site.tld/lorem.ipsum/whatever">http://site.tld/lorem.ipsum/whatever</a>
当然,任何人都可以做到这一点,[^\s]+ 可以做到这一点。但明显的问题是,如果我有一个点 (.),例如,在 URL 之后,我不希望它包含在链接中。因此,我们需要将 URL 限制为多个字符,但我们不能创建一个规则来匹配不是特定字符的字符,因为我之前提到的点是“url stopper”,但它也可以是包含在 URL 中。
我的第一个猜测是:
(http\:\/\/[^\s]+)(\,|\.|\;|\:)?
将被替换为
<a href="$1">$1</a>$2
但它不起作用,因为第二个变量容器是可选的,最好将这些字符包含在第一个容器中,因为除了空格字符之外,任何内容都可以。
非常感谢您的帮助,但老实说,我不希望在互联网上找到目前似乎有效的巨大规则。我敢肯定有一个很酷的方法来获得这个。我对正则表达式有一个不错的理解,但是这种情况似乎是我以前没有经历过的。或者也许我错过了什么,毕竟已经过了凌晨 3 点。
谢谢!
编辑:
@Chirael 为我清除它,但这是我的最终解决方案:
(http\:\/\/[^\s]+?)(\,|\.|\;|\:)?(\s|$)
- 我正在清除斜线,因为我使用的是 PHP
- 我在第二个变量中添加了更多字符作为“URL 停止符”
- 由于第一个变量变为“非贪婪”,并且第二个是可选的,如果未指定第三个,则链接将仅包含“http://”之后的第一个字符。但是当 URL 是文本中的最后一件事时出现了问题,因此现在第三个变量可以是空格字符或文本的结尾。
【问题讨论】: