PHP:使用正则表达式在语句中查找语句

标签 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{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 标志)

关于PHP:使用正则表达式在语句中查找语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12244784/

相关文章:

javascript - 是否可以编写短正则表达式来替换函数

php - 解析包含 3 个分隔符的格式化字符串以创建多个平面数组

php - 在 PHP 中使用正则表达式将多行字符串转换为多元素数组

php - preg_match_all 用于括号内和括号外的单词

php - 保护服务器上的 xml 文件

php - 如何使用PHP监视服务器上的所有内容以查找错误所在?

php - 如何在 Laravel 5 中编写此查询

php - Drupal模板if语句

python - 正则表达式的最大匹配长度

regex - 字符串的正则表达式,后跟括号中的参数