здравствуйте, такой вопрос, у меня есть замена с помощью регулярного выражения: Код (Text): $body = preg_replace("#\[size\=(1|2|3|4|5|6|7|8])\](.*)\[/size\]#isU", "<font size=\"$1px\">$2</font>", $body); вот текст для замены: Код (Text): [size=1] малый текст [size=3]средний[/size] [size=4]большой[/size] [/size] как сделать так, чтобы обрабатывалось не так: Код (Text): <font size="1px"> малый текст [size=3]средний</font> <font size="4px">большой</font> [/size] а так: Код (Text): <font size="1px"> малый текст <font size="3px">средний</font> <font size="4px">большой</font> </font> заранее спасибо
Вручную считать вложенность, по этой теме уже был топик, на phpClub тоже обсуждали. Код (Text): <block> <block> <block></block> <block></block> </block> <block></block> </block> <block> <block></block> </block> Вот для того, чтобы такое разгрести, существуют конечные автоматы. Так что удачи =) Кроме того, дам только одну подсказку: Отвратительно, писать надо так (и не экранировать знак равно): \[size=([1-8]{1})\]
а так - бред Такая проблема может возникнуть с другими ББ кодами но никак не с Size в таких случаях, заменять следует по одному, тоесть отдельно открывающий и закрывающий теги парность контролировать этой функцией PHP: <? function bbcontrol($text,$thisbb) { for($i=0,$c=count($thisbb);$i<$c;$i++) { preg_match_all("#\[(".$thisbb[$i].")\]#isU",$text,$openbb); preg_match_all("#\[\/(".$thisbb[$i].")\]#isU",$text,$closebb); if (count($openbb[1])>count($closebb[1])) { if (preg_match("#\[\/".$thisbb[$i]."\]#is",$text)) { $exp=explode("[/".$thisbb[$i]."]",$text); for($z=0,$k=count($openbb[1])-count($closebb[1]);$z<$k;$z++) { $exp[0].="[/".$thisbb[$i]."]"; } $text=join("[/".$thisbb[$i]."]",$exp); } else { $text=str_replace("[".$thisbb[$i]."]","[".$thisbb[$i]."]",$text); } }else if (count($openbb[1])<count($closebb[1])) { if (preg_match("#\[".$thisbb[$i]."\]#is",$text)) { $exp=explode("[".$thisbb[$i]."]",$text); for($z=0,$k=count($closebb[1])-count($openbb[1]);$z<$k;$z++) { $exp[0].="[".$thisbb[$i]."]"; } $text=join("[".$thisbb[$i]."]",$exp); }else { $text=str_replace("[/".$thisbb[$i]."]","[/".$thisbb[$i]."]",$text); } } } return $text; } ?>