Удалите HTML разрывы строк между тегами <ul> - PullRequest
2 голосов
/ 30 июня 2011

У меня есть система CMS, которая позволяет людям также использовать HTML-код, но в конце функции предоставляется nl2br, что делает это:

<ul>
<li></li>
</ul>

в следующее:

<ul><br/>
<li></li><br/>
</ul>

Теперь я хочу удалить эти <br/>, которые существуют между <ul> тегами.

Я уже нашел другой вопрос, который задает почти то же самое, но для новых строк.Я интегрировал это в свою CMS, но для одного клиента все содержимое уже заполнено, поэтому я должен исправить это после замены \n на <br/>.

другой вопрос предоставляет это как регулярное выражение для совпадения \n в пределах <ul></ul>:

/(?<=<ul>|<\/li>)\s*?(?=<\/ul>|<li>)/is

Я бы подумал что-то вроде этого:

/(?<=<ul>|<\/li>)(<br>|<br\/>|<br \/>)(?=<\/ul>|<li>)/is

Сделал бытрюк, но это не так.Чего мне не хватает?

РЕДАКТИРОВАТЬ

Я очень открыт для решений DOMDocument, если есть способ запроса разрывов строк с помощью xpath, это, вероятно, решит мою проблему.*

Ответы [ 2 ]

2 голосов
/ 30 июня 2011

В приведенном вами примере теги <br> окружены пробелами (по крайней мере, символами новой строки), поэтому это необходимо отразить в соответствующем регулярном выражении.

/(?<=<ul>|<\/li>)(\s*<br>\s*|\s*<br\/>\s*|\s*<br \/>\s*)(?=<\/ul>|<li>)/is 

Во многих случаях регулярные выражения НЕ являются лучшим способом анализа HTML (я определенно согласен с комментариями выше / ниже), но они всегда достаточно хороши для некоторых конкретных целей.

0 голосов
/ 30 июня 2011

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

Вместо этого рассмотрите возможность использования парсера HTML, такого как HTMLCleaner или HTML Agility Pack для выполнения этой задачи.

...