正则表达式来查找块

时间:2013-11-06 14:28:33

标签: php html regex

我需要你的正则表达帮助。 这是一个示例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>"
   }
}

提前致谢。

2 个答案:

答案 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)