Итак, у меня есть регулярное выражение, которое я пытаюсь использовать для соответствия определенному шаблону в некоторых файлах html. Вот preg_match заявление:PHP preg_match - соответствующие элементы html
preg_match('@<'.$htmlElementType.' id\s*=\s*"{{ALViewElement_'.$this->_elementId.'}}".*>[\s\S]*</'.$htmlElementType.'(>)@i', $htmlString, $newMatches, PREG_OFFSET_CAPTURE)
Чтобы было ясно, это попытка сопоставить HTML-элемент с идентификатором {{ALViewElement _ *}.}, Но она также должна закончиться сама с закрывающим тегом, например, если $ htmlElementType был «секцией», и он заканчивался на «/ section>».
Если мой HTML выглядел так же, как это ни с чем-либо в нем, он работает, как ожидалось:
<section id="{{ALViewElement_resume}}">
<!--{{RESUME_ADD_CHANGE_PIECE}}-->
<!--{{RESUME}}-->
</section>
Проблема заключается в том, когда у нас есть раздел элемент позже в HTML, а также имеет закрывающий/раздел >. Пример:
<section id="{{ALViewElement_resume}}">
<!--{{RESUME_ADD_CHANGE_PIECE}}-->
<!--{{RESUME}}-->
</section>
<div>
</div>
<section>
HEY THIS IS ME
</section>
В этом случае полная машина - это все выше. Но я хочу, чтобы он остановился на том, что открывает мою первую. Это важно, потому что позже в моем коде мне нужно расположение последнего> в этом конечном теге.
Любые идеи, как я мог немного изменить это регулярное выражение?
Спасибо за помощь!
** Не использовать регулярные выражения для разбора HTML **. Вы не можете достоверно разобрать HTML с регулярными выражениями, и вы столкнетесь с печалью и разочарованием в будущем. Как только HTML изменится с ваших ожиданий, ваш код будет сломан. См. Http://htmlparsing.com/php для примеров того, как правильно анализировать HTML с PHP-модулями, которые уже были написаны, протестированы и отлажены. –