刚刚收到一些回调以突出显示我的所有BBC代码。 花了我的年龄,因为正则表达对我来说仍然是一个巨大的痛苦。
function highlight($str) {
return '<b>'.$str[0].'</b>';
}
$str = '[b]Hello, World![/b] in either the color [blue]test[/blue] or [red]test[/red]';
$highlight = preg_replace_callback('|[[\/\!]*?[^\[\]]*?]|si', 'highlight', $str);
echo $highlight;
但现在我真的想做相反的事:) 除了BBCodes之外,突出显示其他所有内容的正则表达式是什么?
答案 0 :(得分:0)
这不是最佳解决方案,但可行。
$re = '/
(.*?) # text before bBB...eBB
(\[(\w+?)\].*?\[\s*\/\3\]) # bBB...eBB
|
(.*?$) # text after last bBB..eBB
/xui';
$string = "beginOfS [b]Hello, World![/b] in either the color [blue]test lorem [yel]ipsum[/yel] dolorem [/blue] or [red]test[/red] endOfS";
echo preg_replace($re, '<b>\1\4</b>\2', $string);
// $nMatches = preg_match_all($re, $string, $aMatches);
<强>返回:强>
<b>beginOfS </b>[b]Hello, World![/b]<b> in either the color </b>[blue]test lorem [yel]ipsum[/yel] dolorem [/blue]<b> or </b>[red]test[/red]<b> endOfS</b>