我需要你的正则表达帮助。 这是一个示例html我想运行你提供的正则表达式:
<div id="divId">
{% block var_name1 %}
<p> Hello world </p>
{% endblock %}
<div class="someclass">
{% block var_name2 %}
<span>Hello span</span>
{% endblock %}
</div>
</div>
在php中找到所有匹配的块,如 preg_match_all :
array(2) {
[0]=>
array(2) {
[0]=> "var_name1"
[1]=> "var_name2"
}
[1]=>
array(2) {
[0]=> "<p> Hello world </p>"
[1]=> "<span>Hello span</span>"
}
}
提前致谢。
答案 0 :(得分:0)
这应该做的工作
/\{% block (.+?) %\}(.*?)\{% endblock %\}/ims
(.+?)
表示任意字符的组,至少一个但不合适(?
)。如果您有更具体的要求,则必须更改它。
这是直截了当且非常严格的。因此,%
和block
之间的多个空格会让正则表达式崩溃。
更加乐于助人:
/\{%\s+block\s+(.+?)\s+%\}(.*?)\{%\s+endblock\s+%\}/ims
\s+
表示至少有一个像空格或制表符的字符。
答案 1 :(得分:0)
这是您正在寻找的正则表达式:
preg_match_all('/\{% block ([a-z0-9_]+) %\}(.*?)\{% endblock %\}/is', $text)