цитирование и регулярные выражения

INS

Новичок
цитирование и регулярные выражения

Голову сломал. Поиском не нашёл.

Задача проста как мир:

заменить все [ quote ]что-то[ /quote ] на <div class=quote>что-то</div>

С учётом того, что всё это может быть неограниченной вложенности, т.е.

[ quote ][ quote ]цитата 2[ /quote ]цитата 1[ /quote ]


Если заменить по отдельности [ quote ] на <div>, а [ /quote ] на </div> - то если кто-то не закрыл тэг (или наоборот, не открыл), получается полный п.

Поможите кто чем можете :))

правда не работает :D
 

sage

Новичок
и не будет и не сможешь сделать так, чтобы
Если заменить по отдельности [ quote ] на <div>, а [ /quote ] на </div> - то если кто-то не закрыл тэг (или наоборот, не открыл)
получилось бы всё хорошо.... этот форум тому подтверждение. заменяй по отдельности
 

INS

Новичок
решил проще чем думал. пойду напьюсь.

PHP:
<?
$os1=$s1="[ quote ]Во саду ли [ quote ]в огороде[/ quote]
девица гуляла[ /quote ]
у ней русая коса, лента голубая";

while(strcmp($s1=preg_replace("/\[ quote \]([^]]+)\[\/ quote \]/msi","<div class=quote>\\1</div>",$os1),$os1)!=0) {$os1=$s1;}

echo $s1;
?>
(пробелы только лишние убрать надо из [ quote ], а то этот форум их косячит :)

-~{}~ 08.03.06 10:37:

Правда другой баг обнаружил - если в коде есть ещё какие-нибудь конструкции в брэкетах, то не пашет.

[ quote ] [ s13 ] - типа смайлик [ /quote ] - не работает!

Кто малость подправить регексп получит спасибу :) а пока замену квотов я в самый конец процессинга утащил и пусть там пашет.
 

sage

Новичок
попробуй
PHP:
preg_replace("#\[ quote \](.+?)\[/ quote \]/is","<div class=quote>\\1</div>",$os1)
 

sage

Новичок
или
Код:
#\[ quote \](.+?)\[/ quote \][b]#[/b]is
эт уже я не доглядел =)
 
Сверху