PHP:使用正则表达式在语句中查找语句
目前我有以下情况: 我试图“解析”一个文本,寻找占位符(它们的符号是“{…}”),稍后,我将用实际文本替换它们 我想到了正则表达式PHP:使用正则表达式在语句中查找语句,php,regex,preg-match-all,Php,Regex,Preg Match All,目前我有以下情况: 我试图“解析”一个文本,寻找占位符(它们的符号是“{…}”),稍后,我将用实际文本替换它们 我想到了正则表达式 $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{b
$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。这必须使用递归来解决:
/(?=({(?>[^{}]|(?1))+})/g
(您不需要php中的g标志)您将如何替换文本?如果您想允许嵌套组,在有占位符的情况下进行迭代是有意义的。谢谢!在结果数组中,{bar}始终在{foo{bar}之前,是否有一个“保证”?引擎将从“外部”匹配,并以其方式进入,如果您愿意的话。因此,您应该得到[0]=>{foo{bar}[1]=>{bar}
谢谢,但我编写了一个小函数,它将按“复杂性”(计算结果中的大括号…)对结果进行排序