Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php正则表达式:向后看、向前看和贪婪问题_Php_Regex_Greedy - Fatal编程技术网

php正则表达式:向后看、向前看和贪婪问题

php正则表达式:向后看、向前看和贪婪问题,php,regex,greedy,Php,Regex,Greedy,这应该很简单,但我是个笨蛋,我一辈子都想不出来。我正在尝试使用正则表达式匹配特殊的打开/关闭标记内的文本:[p2][/p2] 因此,在本文中: apple [p2]banana[/p2] grape [p2]lemon[/p2] 它应该和“香蕉”和“柠檬”搭配。到目前为止,我研究的正则表达式是: (?<=\[p2\]).+(?=\[\/p2\]) (?这应该可以做到: (?<=\[p2\]).+?(?=\[\/p2\]) (?不使用正则表达式修饰符,您可以使用标准的perl样式

这应该很简单,但我是个笨蛋,我一辈子都想不出来。我正在尝试使用正则表达式匹配特殊的打开/关闭标记内的文本:[p2][/p2]

因此,在本文中:

apple [p2]banana[/p2] grape [p2]lemon[/p2]
它应该和“香蕉”和“柠檬”搭配。到目前为止,我研究的正则表达式是:

(?<=\[p2\]).+(?=\[\/p2\])
(?这应该可以做到:

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

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

当然,一旦我发布此内容,我想我终于找到了答案:(?或者,您可以指定
U
修饰符,以指示模式中的所有量词都应视为非贪婪的,例如
preg\U match('/(?@Dereleed:我不太明白。到底有什么区别?不过,谢谢你的评论。
/U
在这种情况下太过分了,因为只有一个量词。但无论如何我都不会使用
/U
;这会降低你的正则表达式的可移植性(很少有正则表达式风格支持它)可读性较差。人们期望量词贪婪,必须有意识地努力克服这种期望。当你看到量词旁边的
时,这就容易多了。