PHP регулярное выражение: взгляд назад и вперед и проблема жадности - PullRequest
5 голосов
/ 14 ноября 2009

Это должно быть просто, но я нуб, и я не могу на всю жизнь понять это. Я пытаюсь использовать регулярное выражение для сопоставления текста внутри специальных тегов открытия / закрытия: [p2] [/ p2]

Итак, в этом тексте:

apple [p2]banana[/p2] grape [p2]lemon[/p2]

должно совпадать с "бананом" и "лимоном". Регулярное выражение, над которым я работал до сих пор:

(?<=\[p2\]).+(?=\[\/p2\])

Но это слишком жадно. Он совпадает с буквой «b» в банане и заканчивается буквой «n» в лимоне, что соответствует банан [/ p2] виноград [p2] лимон . Как мне сочетать банан и лимон?

Ответы [ 2 ]

5 голосов
/ 14 ноября 2009

Это должно сделать это:

(?<=\[p2\]).+?(?=\[\/p2\])

Я добавил знак вопроса, чтобы квантификатор не был жадным.

0 голосов
/ 14 ноября 2009

Вместо использования модификатора регулярных выражений, вы можете использовать стандартный модификатор соответствия стиля Perl и добавить? после + или *, чтобы сказать, что определенная часть не жадная. Упомянуто выше, но конкретность может помочь.

...