繁体   English   中英

PHP preg_match_all:方括号标签内的方括号标签

[英]PHP preg_match_all: brackets tags inside brackets tags

我有我的自定义标签,例如。

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

我想提取括号标记内的HTML代码。

我在preg_match_all中使用此模式:

/{\{.*?\}\}((?:(?!\{\{/(.*?)\}\}).)*)\{\{\/.*?\}\}/s

但这不起作用。 我怎样才能解决这个问题?

如果{{tag-name}}不是任意嵌套的,则此正则表达式应这样做:

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

见regex101.com

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

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

使用s (PCRE_DOTALL) 修饰符*? 懒惰的量词


如果需要,可与preg_matchpreg_match_all一起使用,例如

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

有关示例,请参见eval.in。

使用preg_match_all和"/\\{\\{.[^\\}]+\\}\\}(.+)\\{\\{\\/.+\\}\\}/s" regex获取父亲的标签; 问题是您的标签在另一个标签内。

http://php.net/manual/zh/class.domdocument.php上查看DomDocument可以通过简单的方法调用轻松加载文档,获取文档内部的标签以及标签内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM