【发布时间】:2020-07-28 02:05:32
【问题描述】:
在 PHP 中,我想提取树枝块中包含的文本,并认为正则表达式是最有效的。
假设我有一个包含以下内容的文件“index.twig”:
{% block content %}
Content of the page...
{% endblock %}
这段代码运行良好:
$input = file_get_contents("index.twig");
preg_match_all('/\{%\s*block\s*content\s*\%}([^\%}]*)\{%\s*endblock\s*\%}/', $input, $output);
$output 将包含预期的结果。
但是,如果输入文件是这样的:
{% block content %}
{{ a_tag }}
Content of the page...
{% endblock %}
在这种情况下,结束的 }} 会破坏正则表达式并且 $output 是空的。
有正确正则表达式的线索吗?
提取块内容的另一种解决方案?
我想得到:
{{ a_tag }}
Content of the page...
【问题讨论】:
-
为什么要这样做?
-
@DarkBee 我正在为个人项目和教学构建一个非常轻量级的框架
-
提取树枝模板对我来说看起来很奇怪。无论如何,只是
/{% block content %}(.+){% endblock %}/s所见here -
喜欢这个?
^{%.*%}\R((?:(?!{%.*?%}$).*\R)*){%.*%}$regex101.com/r/LtUCiy/1 -
或使用
{%\h*block\h*content\h*%}\R((?:(?!{%\h*endblock\h*%}).*\R)*){%\h*endblock\h*%}regex101.com/r/jFKi84/1