Помогите закрыть открытые тэги с помощью регулярного выражения

grey109

Новичок
Помогите закрыть открытые тэги с помощью регулярного выражения

Есть html код, например:
===
<html>
<body>
123
<p class=a>dfsd
<p class=a>qwe
wer
<p>test

<p class=b>zxcv

</body>
</html>
===

Нужно закрыть в чем все открытые тэги <p>.

Написал регулярное выражение

$r = preg_replace("/(.*?<p.*?>)(.*?\s+)([^<\/].*?)/is", "\\1\\2</p>\\3", $html);

но оно работает не верно.


Подскажите, где ошибка?


ЗЫ: результатом работы должен быть код вроде
===
<html>
<body>
123
<p class=a>dfsd</p>
<p class=a>qwe
wer</p>
<p>test</p>

<p class=b>zxcv

</p>
</body>
</html>
===

-~{}~ 04.11.07 14:56:

Если кто знает, подойдет решение и без применения регулярных варажений.


Заранее спасибо.
 

Pigmeich

Новичок
grey109
Зачем закрывать теги параграфа? По стнадарту он закрытия не требует.

Если есть возможность - используй Tidy HTML.

Регексп у тебя не правильный, да. Где условие на позицию перед следующим тегом? У тебя наоборот отрицательная маска.

-~{}~ 04.11.07 16:23:

Mr_Max
Либитель Оперы?
 

phprus

Moderator
Команда форума
Mr_Max
Посмотрите на ссылку которую вы дали:
http://www.google.com/search?client=opera&rls=ru&q=close+html+tags+php&sourceid=opera&ie=utf-8&oe=utf-8
 

Фанат

oncle terrible
Команда форума
непонятно только, какое это все имеет отношение, блин, к вопросу.

Pigmeich, ты реально начинаешь раздражать.
 

phprus

Moderator
Команда форума
Фaнaт
ИМХО в данном случае Pigmeich всетаки отвечал в основном по теме и только его вопрос про оперу был не в тему.
 

grey109

Новичок
Mr_Max
Искал, но нужного мне не нашел.

Pigmeich
Знаю что можно не закрывать, но дальше по коду текст заключенный между <p></p> будет заменяться на другой, ну например на h5, а если тэг открыт, то получается ерунда на экране.

Подскажи, плз, как должен выглядеть правильно регексп.
 
Сверху