I have this text and I\'m trying to remove all the inner quotes, just keeping one quoting level. The text inside a quote contains any characters, even line feeds, etc. Is th
I think it would be easier to write a parser.
Use regex to find [quote] and [\quote], and then analyse the result.
preg_match_all('#(\[quote[^]]*\]|\[\/quote\])#', $bbcode, $matches, PREG_OFFSET_CAPTURE);
$nestlevel = 0;
$cutfrom = 0;
$cut = false;
$removed = 0
foreach($matches(0) as $quote){
if (substr($quote[0], 0, 1) == '[') $nestlevel++; else $nestlevel--;
if (!$cut && $nestlevel == 2){ // we reached the first nested quote, start remove here
$cut = true;
$cutfrom = $quote[1];
}
if ($cut && $nestlevel == 1){ // we closed the nested quote, stop remove here
$cut = false;
$bbcode = substr_replace($bbcode, '', $cutfrom - $removed, $quote[1] + 8 - $removed); // strlen('[\quote]') = 8
$removed += $quote[1] + 8 - $cutfrom;
}
);