Php 让这个正则表达式使用负前瞻

Php 让这个正则表达式使用负前瞻,php,regex,regex-negation,Php,Regex,Regex Negation,我正在做一个html和bbcode解析器。我有一个正则表达式,它从内到外捕捉重复的组: $re = '/<b>((?:(?!<\/?b>).)*)<\/b>/is'; 但我希望能够匹配文本或任何其他属性。 我已经在使用: '/<b((\s)+?.*?)?\>(.*?)<\/b>/is' 但现在,当我试图加入他们并添加新的负面展望时,我无法让它起作用 我用[b]尝试了“/这将全部: <?php $str = '<b>

我正在做一个html和bbcode解析器。我有一个正则表达式,它从内到外捕捉重复的组:

$re = '/<b>((?:(?!<\/?b>).)*)<\/b>/is';
但我希望能够匹配文本或任何其他属性。 我已经在使用:

'/<b((\s)+?.*?)?\>(.*?)<\/b>/is'
但现在,当我试图加入他们并添加新的负面展望时,我无法让它起作用


我用[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;

?>

[强制正则表达式是解析html注释的错误工具]请发布所需的前后字符串。@nfnneil doneadded@WillBarnwell正确的工具是什么?像beautiful soupFirst这样的html解析器我看到的第一个问题是,如果没有属性,它就不能工作,第二个问题是这个匹配,可以通过添加来修复wich,但第一个问题仍然存在。但是现在使用。*?在中间,它不解析HTML,而不是从内向外匹配HTML标签,它与第一个打开的标签和第一个关闭标签相匹配,即使里面有更多的开放标签,这也不是HTML工作的方式。这是最棘手的部分。
<b class=”string2”>[b]text[/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;

?>