PHP: замена Regex при игнорировании содержимого между тегами html

Я ищу строку регулярных выражений, которая может найти строку слова или регулярного выражения NOT между html-тегами.

Скажем, я хочу заменить (alpha | beta) на: первые две буквы в греческом алфавите: alpha и beta

Я просто хочу, чтобы он заменил альфа, потому что бета находится между тегами . Поэтому игнорируем ((.*?))

🙂

Я не тестировал логику, используемую на этой странице – http://www.phpro.org/examples/Get-Text-Between-Tags.html Но я могу подтвердить логическую точку, сделанную в верхней части страницы, в большой смелой письма, в которых говорится, что вы не должны делать то, что вы пытаетесь сделать с регулярным выражением.

Html не является однородным, и крайние случаи всегда будут укусить вас сзади, если вы используете регулярные выражения для обработки содержимого этих тегов в любой реальной ситуации. Поэтому, если ваша разметка не является чрезвычайно упрощенной, равномерной, 100% точной, содержит только html (не css, javascript или мусор), тогда ваш лучший выбор – библиотека парсеров.

И на самом деле у многих библиотек парсеров есть проблемы, но вы будете далеко впереди рядовых копий. Лучший способ получить текстовый контект тэгов – отобразить html в браузере и получить доступ к свойству innerText данного узла dom (или получить человеческую копию и вставить содержимое вручную) – но это не всегда вариант : D

Возможно, это неправильный способ, но он работает: когда мне нужно сделать что-то подобное, я сначала делаю preg_replace_callback чтобы найти то, что я не хочу сопоставлять и кодировать с чем-то вроде base64.

Затем я могу с радостью запустить обычное preg_replace в результате, зная, что у него нет шансов сопоставить строки, которые я хочу игнорировать. Затем раскручиваем с использованием того же шаблона в preg_replace_callback , на этот раз отправляя матчи для декодирования base64.

Я часто делаю это при автоматическом добавлении ключевых слов или ссылок глоссария или всплывающих подсказок в текст – я сам скремлю tags HTML, чтобы не пытаться создать ссылку или всплывающую подсказку в заголовке привязанного тега или где-то в равной степени смешно, для пример.