2010-01-10 56 views
0

我寫了一個正則表達式來去掉BBCode標籤 - 它只是將允許的標籤去掉(以後再計算沒有標籤的字符串長度)。PHP RegEx擴展 - 如何僅剝離url = *?

我不是專家,當談到正則表達式 - 那麼一個小時後,我發現這幾乎工作:

$pattern = "/\[\/?(i|b|u|url(.*?)|list|li)[\]\[]*\]/i"; 
$stripped = preg_replace($pattern, '', $text); 

只剝去允許了六個標籤(並沒有更多的 - 它是應該)以及可以像'url = http://someurl'一樣擴展的特殊標記'url'。

I.e.

in: [url=someurl]Lorem[/url] ipsum [test]dolor[/test] sit [b]amet[/b]. 
out: Lorem ipsum [test]dolor[/test] sit amet. 

但問題是,它不只是去掉'url = [sometext]',而且'urlipsum'。 我試圖添加一個'='進行解析,但無法達到這一點。

有沒有人有我的提示如何只刪除網址時,它= =?

+1

BBCode是一種太複雜的語言,不能被正則表達式解析。你有沒有試過BBCode解析器? – 2010-01-10 12:07:40

+0

我有一個輸出組件,但沒有隻剝去所有標籤。我只是用它來計算長度 - 因爲在插入標籤時,bbcode標籤不會被視爲使用的字符。 我發現BBcode的梨類無法達到我的期望,做得比我想要的還要多。 – 2010-01-10 12:13:36

回答

1

嘗試:「 *?」

$pattern = '/\[\/?(i|b|u|url(=[^\]]+)?|list|li)[\]\[]*\]/i'; 
+0

這太棒了!非常感謝你! 我添加了額外的測試協議 - 因爲我不想要比http(s),ftp和mailto: 「/ \ [\ /?(i | b | u | url(=(http | https | ftp | mailto)[^ \]] +)?| list | li)[\] \ [] * \]/i「 – 2010-01-10 12:10:19

0
$pattern = "/\[\/?(i|b|u|url=(.*?)|url(?=\])|list|li)[\]\[]*\]/i"; 
+0

這也會剝去url-tag而不是等號 - 我會保留它心神。 – 2010-01-10 12:10:56

0

您可能需要改變量詞的「貪婪」,嘗試將「U」模式修改或刪除問號,看PHP doc