Как регуляркой убрать вложенные теги

Leonid

PHP? нет, не слышал...
Как регуляркой убрать вложенные теги

Делаю функцию для чистки HTML, и вот такая задача - иногда попадаются абзацы, вложенные в абзацы или в заголовки (это при копировании из ворда)

Например

<p>Текст абзаца <p>вложенный абзац</p> продолжение текста</p>

<h1>Текст заголовка <p>вложенный текст</p> продолжение текста</h1>

Для заголовков без проблем чищу:

$text = preg_replace("/<h1>(.*)<p>(.*)<\/p>(.*)<\/h1>/smiU", "<h1>$1 $2 $3</h1>", $text);

А вот для абзацев такое не проходит, точнее работает, но при повторном пропускании обработанного текста через скриптначинает вырезать уже правильные теги.

в общем нужна регулярка, не пойму как ее правильно написать, такого вида

$text = preg_replace("/<p>( любые символы кроме строки </p>)<p>(.*)<\/p>(любые символы кроме строки <p> )<\/p>/smiU", "<h1>$1 $2 $3</h1>", $text);
 

Leonid

PHP? нет, не слышал...
жадность я уже включил U

просто три абзаца

<p>один</p>
<p>два</p>
<p>три</p>

тоже подпадут под регулярку <p>(.*)<p>(.*)<\/p>(.*)<\/p>

и получится

<p>один</p>
два
<p>три</p>

-~{}~ 15.10.09 11:52:

Пытаюсь при помощи негативной опережающей проверки :

$text = preg_replace("/<p>(?!<\/p>)(.*)<p>(?!<\/p>)(.*)<\/p>(?!<p>)(.*)<\/p>/smiU", "<p>$1 $2 $3</p>", $text);

Либо я что-то не так делаю, но результат тот же
 
Сверху