Regexp - поиск текста, который не содержит всего слова - PullRequest
3 голосов
/ 06 февраля 2010

У меня есть похожий текст:

<html><p>this is <b>the</b> text</p> and <p>this is another text</p></html>

и мне нужно получить этот текст с помощью регулярного выражения

this is <b>the</b> text

Проблема в том, что когда я использую простое регулярное выражение, подобное этому (<html>.*</p>), я получаю весь текст до последнего появления </p>

Кто-нибудь может мне помочь?

спасибо lennyd

Ответы [ 4 ]

3 голосов
/ 06 февраля 2010

Вам нужен не жадный матч:

<html>.*?</p>

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

2 голосов
/ 06 февраля 2010

По умолчанию квантификаторы регулярных выражений являются жадными, то есть вы получаете совпадение максимальной длины. Вам нужно будет указать, что вы хотите «не жадное» соответствие, используя. *?

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

Глупый вопрос, все еще использующий чистое регулярное выражение, почему бы просто не удалить <..> внутри абзацев? Затем возьмите фразы, используя что-то вроде [^<]

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

Чтобы захватить данные между тегами para, вы можете использовать регулярное выражение с положительным прогнозным утверждением /<p>(.*)(?=<\/p>)/, которое является более жадным, чем .*?, и работает медленнее, но может быть полезно для вас. Также убедитесь, что ваш HTML верен, это означает:

  1. Все теги параграфов закрыты. HTML-браузеры закрывают теги para при входе в другой блок.
  2. Теги Para не вложены :) В противном случае у вас возникнут проблемы с любым регулярным выражением.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...