PHP регулярное выражение: взгляд назад и вперед и проблема жадности
Это должно быть просто, но я нуб, и я не могу на всю жизнь понять это. Я пытаюсь использовать регулярное выражение для сопоставления текста внутри специальных тегов открытия / закрытия: [p2][/p2]
Итак, в этом тексте:
apple [p2]banana[/p2] grape [p2]lemon[/p2]
это должно соответствовать "банан" и "лимон". Регулярное выражение, над которым я до сих пор работал:
(?<=\[p2\]).+(?=\[\/p2\])
Но это слишком жадный. Он совпадает с буквой "b" в банане и заканчивается буквой "n" в лимоне, что соответствует банану [/ p2] grape [p2] lemon. Как мне подобрать банан и лимон?
2 ответа
Это должно сделать это:
(?<=\[p2\]).+?(?=\[\/p2\])
Я добавил знак вопроса, чтобы сделать квантификатор не жадным.
Вместо использования модификатора регулярных выражений, вы можете использовать стандартный модификатор соответствия стиля Perl и добавить? после + или *, чтобы сказать, что определенная часть не жадная. Упомянуто выше, но конкретность может помочь.