即時通訊在網站上發表評論部分。 起初,我需要做的正則表達式查找任何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