регулярное выражение - PullRequest
3 голосов
/ 31 января 2011

У меня есть такая строка.

<p class='link'>try</p>bla bla</p>

Я хочу получить только <p class='link'>try</p> Я пробовал это.
/<p class='link'>[^<\/p>]+<\/p>/

Но это не работает.

Как я могу это сделать?Спасибо,

Ответы [ 4 ]

4 голосов
/ 31 января 2011

Если это ваша строка, и вы хотите, чтобы текст между этими тегами p, то это должно работать ...

/<p\sclass='link'>(.*?)<\/p>/

Причина, по которой вы не работаете, заключается в том, что вы добавляете <\/p> к вашему не диапазону символов.Он не соответствует буквально, но проверяет не каждый символ в отдельности.

Конечно, я должен упомянуть, что существуют более удобные инструменты для разбора фрагментов HTML (например, анализатор HTML).

0 голосов
/ 31 января 2011

Я попытался сделать один менее конкретным для любого конкретного тега.

(<[^/]+?\s+[^>]*>[^>]*>)

это возвращает:

<p class='link'>try</p>

0 голосов
/ 31 января 2011

Похоже, вы использовали этот блок: [^<\/p>]+, намереваясь соответствовать чему угодно, кроме </p>. К сожалению, это не то, что он делает. Блок [] соответствует любому из символов внутри. В вашем случае, часть /<p class='link'>[^<\/p>]+ соответствовала <p class='link'>try</, но за ней сразу не последовало ожидаемое </p>, поэтому совпадения не было.

Решение Алекса, использовать не жадный квалификатор, - это то, как я склонен подходить к такого рода проблемам.

0 голосов
/ 31 января 2011
'/<p[^>]+>([^<]+)<\/p>/'

заставит вас "попробовать"

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