PHP preg_match_all:括号内的括号标记

PHP preg_match_all:括号内的括号标记,php,regex,preg-match-all,Php,Regex,Preg Match All,我有我的定制标签,例如 {{tag-name}} <table> <tr> {{loop}}<td>text</td> ... {{/loop}} </tr> </table> {{/tag-name}} 但它不起作用。我如何解决这个问题?用preg\u match\u all和“/\{.^\}+\}(+.+)\{\\/.+\}/s”regex获取你父亲的标签; 问题是您的标签在另一个标签中 Look Do

我有我的定制标签,例如

{{tag-name}}
<table>
  <tr>
    {{loop}}<td>text</td> ... {{/loop}}
  </tr>
</table>
{{/tag-name}}

但它不起作用。我如何解决这个问题?

用preg\u match\u all和
“/\{.^\}+\}(+.+)\{\\/.+\}/s”
regex获取你父亲的标签; 问题是您的标签在另一个标签中


Look DomDocument at是一个简单的方法调用,可以很容易地加载文档、在文档中获取标记和标记内容…

如果
{{tag name}
不是任意嵌套的,这个正则表达式应该做到:

$pattern = '~{{([^}]+)}}(.*?){{/\1}}~s';

捕获第一个括号中的组
{{([^}]+}}
中的标记名,并匹配结尾
{{/\1}}

捕获的第二个括号组的匹配项
(.*)
将位于
$out[2]

使用
s(PCRE\u DOTALL)
*?


如果需要,与或一起使用,例如

if(preg_match_all($pattern, $input, $out)) {
   var_dump($out);
}

请参阅。

提取的文本应该是什么样子?是否要在使用匹配的内容后执行替换?我这样问是因为如果是的话,方法可能会不同。“不起作用”是什么意思?“不起作用”对于我们理解这个问题来说是不够的。你试的时候发生了什么?你收到错误消息了吗?你得到了不正确的结果吗?你没有得到结果吗?如果结果不正确,是什么导致结果不正确?你在期待什么?你得到正确的结果了吗?如果是,它们是什么?不要让我们猜。@sshashank124,像这样:@AndyLester,我得到的是:
if(preg_match_all($pattern, $input, $out)) {
   var_dump($out);
}