【发布时间】:2013-01-02 19:48:11
【问题描述】:
我正在使用以下模式来捕获链接,并将它们转换为 HTML 友好链接。我在 preg_replace_callback 中使用了以下模式,并且大部分情况下它都有效。
"#(https?|ftp)://(\S+[^\s.,>)\];'\"!?])#"
但是当文本这样读时,这种模式就失败了:
http://mylink.com/page[/b]
此时它捕获了 [/b 有趣的是它是链接的一部分,结果如下:
<a href="http://woodmill.co.uk[/b">woodmill.co.uk[/b</a>]
我已经查看了模式,并使用了一些备忘单来尝试了解正在发生的事情,但这让我很困惑。你们中的任何人都可以编码忍者的帮助吗?
【问题讨论】:
-
你能用简单的语言解释一下你的匹配标准是什么吗?您是否打算简单地捕获 URL 中存在非法字符(即 URL 中不允许出现)的部分,因为您的 URL 后面不一定有空格?
-
@MikeBrant 简单来说,我想捕获一个 url,只要它不以句号或逗号结尾。所以mydomain.com/page 可以,但是mydomain.com/page。会失败。它旨在成为 CMS 的一部分,我在发布这个问题后不久就找到了解决方案(doh!),我在这个问题上发现了一个新的长度模式:link
-
您应该发布您的问题的答案您的问题,而不是其他人的问题。
-
@Cyborgx37 也许,但在对另一个问题的模式进行进一步测试后,我发现它仍然中断。所以这毕竟不是一个解决方案。
标签: php regex preg-replace-callback