【发布时间】:2014-07-20 18:38:57
【问题描述】:
我正在使用下面的 PHP 和正则表达式来搜索一个巨大的字符串
[LINK]www.anyurl.com[/LINK]
并将其替换为:
<a href="http://www.anyurl.com">http://www.anyurl.com</a>
如果 URL 前面不存在 http 或 ftp,则在前面添加 http://。
$re = '/\[LINK]((?:(?!(http|ftp)|\[\/LINK]).)*)\[\/LINK]/i';
$subst = '[LINK]http://$1[/LINK]';
$xtext = preg_replace($re, $subst, $xtext, 1);
$xtext = preg_replace("/(\[LINK\])(\S*)(\[\/LINK])/", "<a href=\"$2\" target='_blank'>$2</a>", $xtext);
我的问题是它似乎只适用于它所涉及的第一个匹配项,而不适用于文档中的其他 [LINK]www.urls.com[/LINK]。文档为$xtext
【问题讨论】:
-
我现在并不聪明,但感谢您的评论
-
@developerwjk 我没有解析 HTML 标签。 [LINK] [/LINK] 什么时候变成了 HTML 标签?
-
@MikeC 这里的人可能是无知的,只是讨厌正则表达式。
-
@MathewFoscarini 我不介意,但他们可以提供解决方案,而不仅仅是说出他们所说的话。我上面的解决方案速度很快,效果很好,但我需要重复。我希望那些攻击者实际上并不了解他们所看到的。
-
PHP 有一个BBCode built-in extension。