我有自定义标签,例如
{{tag-name}}
<table>
<tr>
{{loop}}<td>text</td> ... {{/loop}}
</tr>
</table>
{{/tag-name}}
我想在括号标记中提取HTML代码。
我在preg_match_all中使用这个模式:
/{\{.*?\}\}((?:(?!\{\{/(.*?)\}\}).)*)\{\{\/.*?\}\}/s
但它不起作用。我该如何解决这个问题?
答案 0 :(得分:1)
如果{{tag-name}}
不是任意嵌套的,那么这个正则表达式应该这样做:
$pattern = '~{{([^}]+)}}(.*?){{/\1}}~s';
在第一个带括号的组{{([^}]+)}}
中捕获标记名称并匹配结束{{/\1}}
第二个带括号的小组(.*?)
的捕获匹配将在$out[2]
使用s (PCRE_DOTALL)
modifier和*?
lazy quantifier。
如果需要,请与preg_match或preg_match_all一起使用,例如
if(preg_match_all($pattern, $input, $out)) {
var_dump($out);
}
答案 1 :(得分:0)
使用preg_match_all和"/\{\{.[^\}]+\}\}(.+)\{\{\/.+\}\}/s"
正则表达式获取父亲的标签;
问题是你的标签在另一个标签内。
在http://php.net/manual/en/class.domdocument.php看看DomDocument是通过简单的方法调用轻松加载文档,在文档中获取标签和标记内容......