очистка тегов

дедушка АУ

Новичок
очистка тегов

Всем привет)
такой вот вопрос: как мне очистить все теги типа: <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><b style="mso-bidi-font-weight: normal">

с целью оставить только <p align="center"><b>

полная очистка работает
$Cont = preg_replace("/<([a-z]+[\d]?)[^>]*>/i","<$1>",$Cont);

а вот оставить align="center" не получается
пробовал так $Cont = preg_replace("/<([a-z]+[\d]?).*( align=\"center\")*.*>/i","<$1$2>",$Cont);
 

ИванЧай

Guest
Используй позиционные проверки в регулярных выражениях:
http://phpclub.ru/detail/article/regexp_2
 

дедушка АУ

Новичок
ИванЧай
дело в том что align="center" не всегда будет в конце тега
и отмазацца конструкцией типа:
$Cont = preg_replace("/(?<=<)[a-z]+[\d]?([^>]*)(?=align=\"center\">)/i","",$Cont);

вряд ли получится :(
 

sage

Новичок
а зачем тебе понадобилось одно выражение? ведь можно несколькими: сначала убираешь все class="что-то", затем style="что-то"...
 

дедушка АУ

Новичок
sage
угу попробуй угадать что там тебе Ворд подсунет
хотелось бы удалять все внутри тега кроме align="center"
 

sage

Новичок
PHP:
$str = '<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><b style="mso-bidi-font-weight: normal">';

echo preg_replace('~<([^ ]+?).*?(?: ( align="[^"]+?").*?)?>~si', '<\1\2>', $str);
Без пробела после ?:
 

дедушка АУ

Новичок
sage
точно! спасибо!
а si это что за параметр? i- регистронезависимость
а s тогда что?
 

sage

Новичок
s - модификатор, при котором . совпадает со всеми символами, в том числе и символом перевода строки
 
Сверху