
У меня есть текст (html-код) и мне нужно найти <p>
теги с их классами, идентификаторами, стилями (если есть) и т. д. Я делаю это с помощью следующих регулярных выражений:
<p(.*?)>
или(<p([^>]+))>
Образец моего текста здесь:
<p class="navi_buttons">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p class="reg">Aliquam mi sapien, rutrum eget sem vel, semper efficitur.<a href="xyz.html" class="topiclink">vitae velit</a></p>
<p class="THIS_SHOULD_BE_AVOIDED">Donec fringilla sapien vitae interdum volutpat.</p>
<p class="nav">Cras nec orci non dolor ultrices luctus sit amet vitae velit.</p>
Проблема в том, что мне нужно найти все вхождения <p>
тега, кроме одного определенного класса (т.е. я хочу избежать абзацев этого класса). Я не знаю, как написать исключение, которое будет рассматриваться как строка, а не как набор отдельных символов. Я был бы признателен за вашу помощь. С уважением,
решение1
Я бы лучше схитрил, чем пытался придумать регулярное выражение.
Найдите тег, который вы не хотите менять, и замените его уникальной строкой:
Search: "<p class="nav">" Replace: "***xxxxxx***"
Затем выполните операцию со всеми остальными <p>
тегами и отмените первоначальное изменение:
Search: "***xxxxxx***" Replace: "<p class="nav">"
решение2
Проблема, похоже, решена. Я спрашивал также на форуме, посвященном LibreOffice, и получил ответ:
<p (?!.*EXCLUDING_PATTERN.*)(.*?)>
например:<p (?!.*"THIS.*)(.*?)>
Это работает, по крайней мере в моем случае.