Я посмотрел, и, кажется, нет старых вопросов, которые прямо касаются этого. Я также нигде не нашел ясного решения.
Мне нужен способ сопоставить тег, открыть, закрыть и вернуть все, что заключено в тег. Регулярные выражения, которые я пробовал, имеют проблемы, когда теги вложены. Например, регулярное выражение <tag\b[^>]*>(.*?)</tag>
вызовет проблемы с <tag>Some text <tag>that is nested</tag> in tags</tag>
. Это будет соответствовать <tag>Some text <tag>that is nested</tag>
.
Я ищу решение этой проблемы. В идеале эффективный. Я видел решения, которые включают сопоставление начальных и конечных тегов по отдельности и отслеживание их индекса в контенте, чтобы определить, какие теги идут вместе, но мне это кажется крайне неэффективным (если это единственный возможный способ, то c'est la vie ).
Решение должно быть только на PHP, так как это язык, с которым я должен работать. Я разбираю фрагменты HTML (подумайте о разделах тела из блога WordPress, и вы не слишком далеко). Если есть решение лучше, чем регулярное выражение, я все уши!
UPDATE:
Просто чтобы прояснить, я знаю, что регулярные выражения - плохое решение, но я должен как-то это сделать, поэтому в названии конкретно упоминаются лучшие решения.
ДОПОЛНИТЕЛЬНОЕ ОБНОВЛЕНИЕ:
Я разбираю фрагменты. Решения должны принимать это во внимание. Если синтаксический анализатор работает только с полным документом или собирается добавить <head>
и т. Д. ... когда я вернул HTML, это не является приемлемым решением.