即时通讯在网站上发表评论部分。 起初,我需要做的正则表达式查找任何URL和替换它与Url正则表达式为preg_replace,但没有匹配bbcode内的网址[url]
<a href="url"></a>
所以,我发现了一个超正则表达式包围找到注释的所有URL的,我做的是返回所有功能网址为html标记:
function addURLTags($string) {
$pattern = "/(?i)\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’]))/";
return preg_replace($pattern, '<a href="$1">$1</a>', $string);
}
一切都很好。但一个星期前,我的老板告诉我,现在我必须将bbcode添加到评论部分。我就像“没问题”......但他告诉我,我的函数addURLTags必须留下来。
所以任何像这样的字符串:
http://www.google.com
[url]http://www.google.com[/url]
[url="http://www.google.com"]http://www.google.com[/url]
必须更换相同的字符串:
<a href="http://www.google.com">http://www.google.com</a>
所以我有一个小的PHP库,替换所有的bbcode ocurrences到HTML代码。
我想:“好吧,第一我应该没有在beggining一[url]标签的所有URL ocurrences其次我代替所有的UBB标签!”
我试着在超级正则表达式的开始处添加一个否定断言,如下所示:
/(?i)\ b((?![url])(?:https?:// | www \ d {0, 3)[。] | [a-z0-9 .-] + [。] [az] {2,4} /)(?:[^ \ s()<>] + |(([^ \ s )>] + |(([^ \ s()<>] +)))))+(::(([[\ s(012)<>] + |(([^ \ s >] +))))| [^ \ s`!()[] {};:'\“。,<>?«»”“'']))/
但没有工作!
林有点新手正常表达式和我尝试过的所有在线测试人员不能很好地处理如此长的正则表达式。我不知道还有什么尝试。
你有什么建议吗?你知道有没有“url替换”,有没有[url] bbcode标签的PHP lybrary?
预先感谢您。
我非常专注于按照自己的方式做事,因此我无法看清所有可能性。 我分割了注释字符串并保存了所有bbcode的字符串。然后我将所有这些发送到bbcodelibrary。其余的字符串与超正则表达式正常工作。 完美。非常感谢! – 2012-04-14 20:47:16