$regex = '/\[b\](.*?)\[\/b\]/is';
$string = '[b][b][b]string[/b][/b][/b]';
重複匹配這將只匹配直到第一個[/ B],因此,如果我用這個正則表達式來此的bbcode轉換爲HTML我將結束與此:內匹配
string[/b][/b]
我m使用PHP preg_replace,我如何才能最終得到string
,所以有3個html bold標籤。
$regex = '/\[b\](.*?)\[\/b\]/is';
$string = '[b][b][b]string[/b][/b][/b]';
重複匹配這將只匹配直到第一個[/ B],因此,如果我用這個正則表達式來此的bbcode轉換爲HTML我將結束與此:內匹配
string[/b][/b]
我m使用PHP preg_replace,我如何才能最終得到string
,所以有3個html bold標籤。
對於這樣髒的情況:
this [b]is [b]a[/b][/b] test [b]string[/b]
遞歸解決方案的工作:
\[b](?:(?:(?!\[b]).)*?|(?R))*\[/b]
PHP代碼:
$str = 'this [b]is [b]a[/b][/b] test [b]string[/b]';
echo preg_replace_callback('~\[(\w+)](?:(?:(?!\[\1]).)*?|(?R))*\[/(\1)]~', function($m) {
return "**".preg_replace("~\[/?$m[1]]~", '', $m[0])."**";
}, $str);
輸出:
this **is a** test **string**
也許'\並[b \(\ /)〕''與'<$1strong>此不檢查匹配配對雖然..這將與str_replace(array('[b]','[/ b]'),數組('','')' – chris85
一樣嗎? [(\/| | b \]'到'<$1b>')? – horcrux
您可以重複替換,直到沒有任何其他內容匹配。 – apokryfos