php正则表达式:lookbehind和lookahead和贪婪问题

时间:2009-11-13 21:07:24

标签: php regex greedy

这应该很简单,但我是一个菜鸟,我不能为我的生活弄明白。我正在尝试使用正则表达式匹配特殊打开/关闭标签内的文本:[p2] [/ p2]

所以在本文中:

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

它应匹配“banana”和“lemon”。我到目前为止所做的正则表达式是:

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

但这太贪心了。它与香蕉中的“b”匹配,以柠檬中的“n”结束,匹配香蕉[/ p2]葡萄[p2]柠檬。我如何才能匹配香蕉和柠檬?

2 个答案:

答案 0 :(得分:5)

这应该这样做:

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

我添加了问号,使量词不贪婪。

答案 1 :(得分:0)

您可以使用标准的perl样式匹配修饰符而不是使用正则表达式修饰符,并添加?在+或*之后告诉特定部分是非贪婪的。如上所述,但特异性可以提供帮助。