[英]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';
捕获第一个带括号的组{{([^}]+)}}
的标记名,并匹配结尾的{{/\\1}}
捕获的第二括号组(.*?)
匹配项将在$out[2]
使用s (PCRE_DOTALL)
修饰符和*?
懒惰的量词 。
如果需要,可与preg_match或preg_match_all一起使用,例如
if(preg_match_all($pattern, $input, $out)) {
var_dump($out);
}
使用preg_match_all和"/\\{\\{.[^\\}]+\\}\\}(.+)\\{\\{\\/.+\\}\\}/s"
regex获取父亲的标签; 问题是您的标签在另一个标签内。
在http://php.net/manual/zh/class.domdocument.php上查看DomDocument可以通过简单的方法调用轻松加载文档,获取文档内部的标签以及标签内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.