我正在做一个html和bbcode解析器。我有这个正则表达式从内到外捕获重复的组:
$re = '/<b>((?:(?!<\/?b>).)*)<\/b>/is';
但我希望能够匹配<b class=”string”>text</b>
或其他任何属性。
我已经通过使用:
'/<b((\s)+?.*?)?\>(.*?)<\/b>/is'
但现在当尝试加入他们并添加新的负面预测时,我无法使其发挥作用。
我尝试了'/<b((\s)+?.*?)?\((?:(?!</?b((\s)+?.*?)?>).)*)<\/b>/is'
,但无法正常工作,为此:
<b class=”string2”><b class=”string”>text</b></b>
它与第一个b标签匹配,但不应该。我想得到:
<b class=”string2”>[b]text[/b]</b>
答案 0 :(得分:1)
这将全部&lt; b> [b]:
<?php
$str = '<b>test</b><b class=”string2”><b class=”string”>text</b></b>';
$prev = '';
while ($prev != $str) {
$prev = $str;
$str = preg_replace("/<b[ a-z0-9\"'\=”]*?>(.*?)<\/b>/is","[b]$1[/b]",$str);
}
echo $str;
?>