вопрос о регулярном выражении - PullRequest
0 голосов
/ 12 февраля 2010

Я хочу сопоставить любой из этих случаев с регулярным выражением. У меня есть текст заголовка, но мне нужно сопоставить его с (возможно) соответствующим HTML:

<h1>header title</h1>
<h2>site | header title</h2>
<h3 class="header">header title</h3>
<h2>header title 23 jan 2009</h2>
<h1>header title</h1>

У меня есть это:

/(<(h1|h2|h3))(.+?)".$title."(.+?)(<\/\\2>)/i

Но, похоже, это не всегда работает, и не понимаю, почему.

Спасибо

Ответы [ 3 ]

4 голосов
/ 12 февраля 2010

Не используйте регулярные выражения для разбора HTML! Вместо этого используйте HTML-анализатор.

0 голосов
/ 12 февраля 2010

То, что вы (логически) хотите для своего примера, выглядит примерно так:

<(group of anything not including ">"> (Value to extract) <(group of anything not including ">">

например.

<[^>]>([^>]+)<[^>]>

Конкретный синтаксис регулярных выражений немного зависит от среды, в которой вы работаете.

Вы можете избежать неприятностей, если уверены, что анализ не сложнее, чем ваш пример. Тем не менее, вы действительно не должны анализировать html (или xml) с регулярным выражением (как кто-то уже отметил здесь), потому что xml может быть произвольно вложенным, и регулярное выражение не может справиться с этим.

0 голосов
/ 12 февраля 2010

Является ли $title регулярным выражением (таким образом, символы {, [ и т. Д. Экранируются)?

С концом строки тоже могут быть проблемы; Должна быть что-то вроде многострочной поддержки, если вы поддерживаете регулярное выражение.

Лучше обрабатывать структурированные данные с помощью соответствующих инструментов - XML ​​с парсером XML, HTML с парсером HTML. Есть парсеры вроде BeautifulSoup в Python, hpricot в Ruby, libxml2 ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...