php - 在正则表达式中重用匹配组

标签 php regex

我正在尝试匹配: “{{ loop (something) }}”和第一个 {{/loop (that something) }}

之间的所有内容

文本示例:

{{ LOOP data }}
  <span> Member key       =  {{.key}}  </span>
  <span> Member value     =  {{.}}     </span>
  <span> Member member    =  {{name}}  </span>
  <span> Iteration number = {{.counter}} </span>
{{ /LOOP data }} 

这是正则表达式不起作用:

/\{\{\s+loop\s+(.+?)\s+\}\}([\w\W]+?)\{\{\s+\/loop\s$1\s+\}\}/i

如您所见,我正在尝试重用第一个匹配组和“$1”:我错过了什么?

PHP代码如下:

$text = '
{{ LOOP data }}
  <span> Member key       =  {{.key}}  </span>
  <span> Member value     =  {{.}}     </span>
  <span> Member member    =  {{name}}  </span>
  <span> Iteration number = {{.counter}} </span>
{{ /LOOP data }}   
';

preg_match('/\{\{\s+loop\s+(.+?)\s+\}\}([\w\W]+?)\{\{\s+\/loop\s\1\s+\}\}/i', $text, $match);
print_r($match);
die;

最佳答案

我相信你想要 \1,而不是 $1

更多信息:http://www.regular-expressions.info/brackets.html#usebackrefinregex

关于php - 在正则表达式中重用匹配组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14318955/

相关文章:

php - Laravel Collection 日期比较

regex - 无法匹配正则表达式中的多个数字

java - 正则表达式在不在括号内的点上拆分字符串

python - 如何将回调传递给 re.sub,但仍插入匹配捕获?

php - 函数 Db::__construct() 的参数太少,传入 0

php - 我想在 php MVC 中从 Controller 接收数据时在 View 表中显示值

php - MySQL IF 语句?

php - 使用 Yii 框架的安全问题

ruby - 执行许多不同 gsub 操作的最快方法?

java - 我希望从 Java 中的匹配模式中提取值