2011-12-21 208 views
2

剝離的BBcode下面的函數正則表達式從字符串

function stripbbtags ($string) { 
    $pattern = "/\[([^\]]+?)(=[^\]]+?)?\](.+?)\[/\1\]/"; 
    $replace = ""; 
    return preg_replace($pattern, $replace, $string); 
} 

返回一個錯誤:

Unknown modifier 

一些隱蔽字符看起來像SOH在記事本++,但有一個黑色的背景。真奇怪。

+0

你想刪除標籤(並保留其內容)嗎?這種BBCode的風味是否允許嵌套標籤? (例如,許多BBCode解析器允許'[quote]'標記嵌套)。如果是這樣,您的解決方案將需要更復雜一點。現在您擁有的嵌套標籤無法正常工作。 – ridgerunner 2011-12-21 17:06:54

回答

2

如何:

function stripbbtags ($string) { 
    $pattern = "#\[([^\]]+?)(=[^\]]+?)?\](.+?)\[/\1\]#"; 
    $replace = ""; 
    return preg_replace($pattern, $replace, $string); 
} 

該錯誤消息是有點神祕,但實際上給你一些見解,如果看一看的preg_replace的文檔,你會發現他們談論的改性劑。這些修飾符用於將選項傳遞給PCRE庫,即做一些不區分大小寫的匹配,字符串在unicode等。

問題依賴於你用作分隔符的字符;您正在使用/並且正則表達式包含斜槓,因此PCRE認爲\1\]/是您的修改器。將分隔符更改爲#可解決該問題。

0

那麼,你的分隔符是/和你結束分隔符後的字符串\1\]/,但既不\1還是其他字符是有效的改性劑。

選擇一個不同的分隔符,或者簡單地在表達式中將其全部出現。