Точнее даже так: Есть теги [bam][/bam], не важно, но нужно обработать их пересечения: [bam] text [bam] text [/bam] [/bam] и пронумеровать: [bam1] text [bam2] text [/bam2] [/bam1] сталкивался ли кто с такой задачей? а то сижу, и не знаю, с какой стороны подобраться смотрел в ИПБ реализацию тегов цитирования - так там просто шаблоны выводятся по частям, а не обработка пересечения
Рекурсивная функция, передающая себе параметром вложенность тега, и позицию парсинга. Примерчик сейчас набросать не могу.
Используй счетчик: снчала он равен 1, когда встречается [bam] он увеличивается на 1, когда [/bam] уменьшается.
если бы тут все было так элементрано, я бы не спрашивал Счетчик использовать конечно нужно, вопрос только - как? коснтрукция тегов может быть разной: Код (Text): [bam] text [bam] text [/bam] [/bam] [bam] text [/bam] пока пытаюсь понять, как в phpbb это сделано (чем больше разбираю, тем больше кажется, что это не то %)).
хм, вроде получилось PHP: <? $text="[bam] text [bam] text [/bam] [/bam] [bam] text [/bam]"; function regex_boom($b,$pos_st,$pos_e,$nummer){ if($pos_st==0){ $pos_st=strpos($b,"[bam]"); } if($pos_e==0){ $pos_e=strpos($b, "[/bam]", $pos_st+strlen("[bam]") ); } $teee=substr($b, $pos_st+strlen("[bam]"), $pos_e-$pos_st+1-strlen("[/bam]") ); if(preg_match("#(\[bam\:00\])#is",$teee)){ $pos_stt=$pos_st+strlen("[bam]")+strpos($teee,"[bam]"); return regex_boom($b,$pos_stt,$pos_e,$nummer); }else{ $pre=substr($b,0,$pos_st); $ende=substr($b,$pos_e+strlen("[/bam]"),strlen($b)); $center="[bam:0".$nummer."]".substr($b,$pos_st+strlen("[bam]"),$pos_e-$pos_st+1-strlen("[/bam]"))."[/bam:0".$nummer."]"; return $pre.$center.$ende; } } function regex_table_boom($b){ $maat=array(); $open_tag_count=preg_match_all("#(\[bam\])#is",$b,$maat); if($open_tag_count>0){ $b=str_replace("[bam]", "[bam]", $b); $b=str_replace("[/bam]", "[/bam]", $b); } //echo "Count open tag: ".$open_tag_count."<br><br>"; for ($i = 0; $i<$open_tag_count; $i++){ $b=regex_boom($b,0,0,($i+1)); } return $b; } $bbf=regex_table_boom($text); echo "<br><br><br>Out: ".$bbf; блин, как тут подстветка включается?