Intereting Posts
Отправить данные формы с помощью jquery 'ajax' и html form 'action' Преобразование аудиофайлов в PHP PHP null и copy-on-write PHP – Различия между `get_headers` и` stream_get_meta_data`? Измените имя созданного файла Laravel и обновленного_at Как получить доступ к свойству класса родителя, если текущий класс был создан в родительском как добавить WordPress phpshortcode в HTML-страницу или пользовательский шаблон? Неустранимая ошибка: Недостаточно памяти (выделено 1134559232) (попытался выделить 32768 байт) в X: \ wamp \ www \ xxx Очень высокая задержка в первом HTTP-запросе проекта CodeIgniter Как решить ошибку PHP 'Примечание: массив для преобразования строк в …' как ping ip-адреса в php и давать результаты Сортировка многомерного массива на основе порядка простого массива Как сделать cookie с PHP Пользовательский рендеринг Zend PHP / mysql: как мне отображать записи, отсортированные по времени и сгруппированные по дате?

Вырезать HTML-теги и снова обернуть теги HTML. Часть / 1

я пытаюсь преобразовать строку follow

<p> string <b> bold <em>italic string</em> also(bold) </b> </p> 

к этой строке

  <p> string </p> <!--------------------------------------- insert --> <b> bold </b> <!------------------------------------ insert --> <em>italic string</em> <b> <!------------------------------------ insert --> also(bold) </b> <p> <!---------------------------------------- insert --> </p> того  <p> string </p> <!--------------------------------------- insert --> <b> bold </b> <!------------------------------------ insert --> <em>italic string</em> <b> <!------------------------------------ insert --> also(bold) </b> <p> <!---------------------------------------- insert --> </p> выделено  <p> string </p> <!--------------------------------------- insert --> <b> bold </b> <!------------------------------------ insert --> <em>italic string</em> <b> <!------------------------------------ insert --> also(bold) </b> <p> <!---------------------------------------- insert --> </p> 

Я знаю, что это неверный html, но мне это нужно для моего проекта. … regex это хороший способ, но я просто не решаюсь.

вся структура будет динамичной,

мое мышление было, регулярное выражение

 // open tag close $regex = '<(.*?)>(.*?)</(.*?)>' if ($1 != $3) { $newString = <$1>$2</$1></$3> } 

но не работают!

Ну, что-то, что, я думаю, работает, состоит из двух последовательных замен:

1.

 ^(\s*<(?!/))([^<]+)>(?=[^<]+\n)((?:(?!</\2>)[\s\S])*?)(?=\n *<)(?![^>]*</\2>) 

Заменить на:

 $1$2>$3\n$1/$2> 

regex101 demo

2.

 /[^>]+>$\n\K([^<>]*?)(^\s*)(?=</([^>]+)>) 

Заменить на:

 $2<$3>\n$1$2 

regex101 demo

ideone render

Я не уверен, почему идеон превращает <> в &lt; и &gt; и я не знаю, как этого избежать 🙁

Но это работает с вашим образцом.

Если у вас есть статическая строка, вы можете сделать это как таковое в javascript,

  htmlstring.replace("<b>","</p><b>") .replace("<em>","</b><em>") .replace("</em>","</em><b>") .replace("</b>","</cb>") .replace("</b>","</b><p>") .replace("</cb>","</b>"); 

Проверьте это http://jsfiddle.net/z5Aba/1/ . (Необходимо проверить консоль)