Как написать регулярное выражение для синтаксического анализа html?

StackOverflow https://stackoverflow.com/questions/792679

Вопрос

Я пытаюсь написать регулярное выражение для моего html-анализатора.

Я хочу сопоставить html-тег с заданным атрибутом (например. <div> с class="tab news selected" ) , который содержит один или несколько <a href> Теги.Регулярное выражение должно соответствовать всему тегу (из <div> Для </div>).Кажется, я всегда получаю ошибки "память исчерпана" - моя программа, вероятно, принимает каждый тег, который она может найти, за соответствующий.

Я использую библиотеки регулярных выражений boost.

Другие советы

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

Как уже говорили другие, не используйте регулярные выражения, если это вообще возможно.Если ваш код на самом деле является XHTML (т.е.это также хорошо сформированный XML) искусственный интеллект может рекомендовать как Ксерксы и Эмигрант Синтаксические анализаторы XML, которые будут выполнять за вас гораздо лучшую работу, чем регулярные выражения.

Возможно, регулярные выражения - не лучшее решение, но я уже использую около пяти разных библиотек, и boost отлично справляется с поиском <a href> теги и ключевые слова.

Я использую эти регулярные выражения:

/<a[^\n]*/searched attribute/[^\n]*>[^\n]*</a>/ для определения местоположения <a href> теги и:

/<a[^\n]*href[[^\n]*>/searched keyword/</a>/ для поиска ссылок

(Кстати, можно ли это сделать лучше?- Я отстой в регулярных выражениях ;))

Что мне сейчас нужно, так это найти теги, содержащие <a href>'s и я думаю, что с регулярными выражениями все будет в порядке - возможно, мне нужно будет написать свою собственную функцию синтаксического анализа, как сказал Петр.

Делайте так, как это делает flex:сопоставьте <div> сопоставьте без учета регистра и переведите ваш анализатор в состояние "div matched", продолжайте обрабатывать входные данные до </div> и сбросьте состояние.

Для этого требуется два регулярных выражения и переменная состояния.

Допустимыми символами тегов SGML являются [A-Za-z_:]

Итак:/<[A-Za-z_:]+>/ соответствует тегу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top