Regex для соответствия всем тегам HTML и содержимому тега, кроме <p>и </p> - PullRequest
1 голос
/ 20 марта 2009

Я ищу регулярное выражение для соответствия всем тегам HTML, кроме <p> и </p>, которое включает содержимое тега. Я занимаюсь разработкой в ​​ColdFusion.

Ранее было сообщение о совпадении тегов , за исключением <p> и </p>, но мне нужно также захватить все между тегами. Например, следующее должно полностью соответствовать:

<a href="http://www.google.com">Google</a>

и

<em>Some text here</em>

но не

<p>Some text and tags here</p>

Есть идеи, как этого добиться?

Ответы [ 4 ]

6 голосов
/ 20 марта 2009

Парсинг HTML с использованием регулярных выражений очень и очень труден и болезнен.

Вам лучше использовать какой-то парсер на основе DOM и найти нужные элементы.

1 голос
/ 20 марта 2009

Иногда проще объединить регулярное выражение с небольшой дополнительной проверкой.

Так что \<.*?\>.*?\<\/.*?\> должно совпадать с тегами <..>...</..>. Затем вы можете программно проверить, что <..> и </...> не являются <p> и </p> соответственно. Вероятно, было бы проще проверить это, если вы сгруппируете их ала:

(\<.*?\>).*?(\<\/.*?\>)

, затем убедитесь, что $1 и $2 (или, тем не менее, вы делаете обратные ссылки в своей среде) не являются тегами открытия и закрытия абзаца.

.*? указывает минимальное соответствие; Я предполагаю, что ваша среда регулярных выражений поддерживает это.

0 голосов
/ 31 марта 2009

Это работает? Я только сделал несколько проверок, но похоже:

Regex expr = new Regex(@"<([A-OQ-Z][A-Z0-9]*)\b[^>]*>(.*?)</\1>", RegexOptions.IgnoreCase);

Я только что скопировал и вставил код C #. Чтобы получить все между тегами, вам нужно использовать \ 1, а затем вам нужно отключить чувствительность к регистру, чтобы IgnoreCase, или -i, или любой другой инструмент, который вы используете, предоставлял эту опцию. Если ваш инструмент этого не делает, вам придется выполнить A-Oa-oq-zQ-z и т. Д. Просто регулярное выражение:

<([A-OQ-Z][A-Z0-9]*)\b[^>]*>(.*?)</\1>

Обратите внимание, что здесь будут отмечаться совпадения с отдельными тегами, но вам следует начать.

0 голосов
/ 21 марта 2009

Вы еще не сказали, что пытаетесь сделать, но есть хорошее изменение, вам лучше использовать функцию XmlParse для создания XML DOM и работать над этим вместо этого.

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