-3

我需要你的正则表达式帮助。这是我想运行您提供的正则表达式的示例 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>

并找到所有匹配块,如preg_match_all在 php 中所做的:

array(2) {
  [0]=>
   array(2) {
    [0]=>  "var_name1"
    [1]=>  "var_name2"
   }
  [1]=>
   array(2) {
    [0]=>  "<p> Hello world </p>"
    [1]=>  "<span>Hello span</span>"
   }
}

提前致谢。

4

2 回答 2

0

这应该做的工作

/\{% block (.+?) %\}(.*?)\{% endblock %\}/ims

(.+?)表示任何字符组,至少一个但不贪心(?)。如果您有更具体的要求,则必须更改它。

这是直截了当且非常严格的。所以之间不止一个空格%block让正则表达式崩溃。

为了更加乐于助人:

/\{%\s+block\s+(.+?)\s+%\}(.*?)\{%\s+endblock\s+%\}/ims

\s+表示至少一个字符,如空格或制表符。

于 2013-11-06T14:33:34.453 回答
0

这是您正在寻找的正则表达式:

preg_match_all('/\{% block ([a-z0-9_]+) %\}(.*?)\{% endblock %\}/is', $text)
于 2013-11-06T14:34:27.440 回答