php regex: lookbehind and lookahead and greediness problem
This should be simple but I'm a noob and I can't for the life of me figure it out. I'm trying to use regex to match text inside of special open/close tags: [p2][/p2]
So in this text:
apple [p2]banana[/p2] grape [p2]lemon[/p2]
it should match "ban开发者_JS百科ana" and "lemon". The regex I've worked up so far is:
(?<=\[p2\]).+(?=\[\/p2\])
But this is too greedy. It matches starting with the "b" in banana and ends with the "n" in lemon, matching banana[/p2] grape [p2]lemon. How do I just match banana and lemon?
This should do it:
(?<=\[p2\]).+?(?=\[\/p2\])
I added the question mark to make the quantifier non-greedy.
Instead of using a regex modifier, you can use the standard perl style match modifier and add a ? after + or * to tell that specific portion to be non-greedy. Mentioned above, but specificity can help.
精彩评论