Мне нужно регулярное выражение php, которое заменяет один тег другим

Вот что мне нужно сделать:

Мне нужно сопоставить следующий тег:

<SPAN style="TEXT-DECORATION: underline">text sample</SPAN> 

Мне нужно заменить span тегом, совместимым с html3, но сохранить текст между ними. Окончательный тег должен выглядеть следующим образом:

 <u>text sample</u> 

Я просто плохо разбираюсь в регулярных выражениях и не могу ответить на этот вопрос.

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

Регулярные выражения не предназначены для манипуляции с тегами.

Если у вас есть какая-либо форма гнездования, она становится беспорядочной.

Однако, учитывая очень простой пример, вы могли бы сделать это:

 $MyString = preg_replace ( '/(?si)<SPAN\s+style\s*=\s*"TEXT-DECORATION:\s*underline;?"\s*>(.*?)<\/SPAN>/' , '<u>$1</u>' , $MyString ); 

Но это во многих отношениях имеет недостатки, и вам гораздо лучше использовать инструмент, предназначенный для манипулирования тегами.

Посмотрите на DOMDocument-> loadHTML () и связанные с ним функции .

НЕ ИСПОЛЬЗУЙТЕ РЕГУЛЯРНЫЕ ЭКСПРЕССИИ В PARSE HTML

не используйте регулярные выражения для анализа HTML

не используйте регулярные выражения для анализа HTML

не используйте регулярные выражения для анализа HTML

не используйте регулярные выражения для анализа HTML

не используйте регулярные выражения для анализа HTML

вам нужно больше разъяснений?

Использовать DomDocument :: LoadFromHTML;)

Вам понадобятся несколько строк:

 preg_replace('|<SPAN style="TEXT-DECORATION: underline">(.+?)</SPAN>|', '<u>$1</u>', $text); preg_replace('|<SPAN style="FONT-WEIGHT: bold">(.+?)</SPAN>|', '<b>$1</b>', $text); preg_replace('|<SPAN style="FONT-STYLE: italic">(.+?)</SPAN>|', '<i>$1</i>', $text); 

и т. д. Хотя, если есть вероятность, что теги не будут точно соответствовать этим регулярным выражениям (что обычно бывает, за исключением очень простого машинного HTML), выполнение этого с помощью регулярных выражений становится ужасно сложным, и вам будет лучше используя синтаксический анализатор.

Для основного примера, который вы указали.

 <?php $string = '<SPAN style="TEXT-DECORATION: underline">text sample</SPAN>'; $pattern = '/<SPAN style=\"TEXT-DECORATION: underline\">(.+?)<\/SPAN>/'; $replacement = '<u>$1</u>' echo preg_replace($pattern,$replacement,$string); ?> 

будет делать трюк. Регулярное выражение шаблона довольно просто – это именно то, что вы ищете (с кавычками и «/» экранировано) с (. +?), Который говорит, что включает все возможные символы до закрытия тега SPAN. Это предполагает, что вы код форматирован, вы можете добавить «i» в конец $ pattern, чтобы сделать его нечувствительным к регистру.

Обратите внимание, что это не совсем правильный способ сделать это.