PHP:在带有正则表达式的语句中查找语句


PHP: Find statement in statement with regular expression

目前我有以下情况:我正在尝试"解析"一个文本,寻找占位符(它们的表示法是"{…}"),稍后,我将用实际文本替换它们。

我想到了正则表达式

$foo = "Hello World {foo{bar}} World Hello!";
$bar = array();
preg_match_all('@'{.+'}@U', $foo, $bar);
var_dump($bar);

但这会返回

array(1) { [0]=> array(1) { [0]=> string(9) "{foo{bar}" } }

使其贪婪将导致:

array(1) { [0]=> array(1) { [0]=> string(10) "{foo{bar}}" } }

但我希望结果是这样的:

array(1) { [0]=> array(2) { [0]=> string(5) "{bar}" [1]=> string(10) "{foo{bar}}" } }

有没有一种方法可以在preg_match(_all)和正则表达式的帮助下实现这一点?

还是我必须一次又一次地循环$bar,直到结果集中没有子语句为止?

您很幸运拥有PCRE。这必须使用递归来解决:http://regex101.com/r/pO3hA0

/(?=({(?>[^{}]|(?1))+}))/g(您不需要php中的g标志)