php - 正则表达式从树枝模板中提取块
问题描述
在 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...
解决方案
您可以简单地将与 twig 标签匹配的所有内容替换为空字符串。这是一个例子:
<?php
$x = <<<EOT
{% block content %}
{{ a_tag }}
Content of the page...
{% endblock %}
EOT;
$x = preg_replace(['/\{%[^\{\}]*%\}\n*/m', '/\{\{[^\{\}]*\}\}\n*/m'], '', $x);
$y = preg_replace('/\{%[^\{\}]*%\}\n*/m', '', $x);
print $x;
print PHP_EOL;
print $y;
推荐阅读
- php - wordpress 产品页面自定义按钮
- postgresql - Postgres:事务中不能有超过 2^32-2 个命令
- docker - 在 docker 映像中安装 yarn 时的权限问题
- extjs - ExtJS Drag and Drop in tree on modern toolkit
- c# - IdentityServer4 自定义 AuthorizeInteractionResponseGenerator
- python - pandas日期系列如何填写
- php - MySQL:在一张表中克隆行
- selenium - 带有类名的下拉菜单不适用于选择函数 Selenium
- java - 注释 RequestMapping() 给出错误
- postgresql - 获取“更新案例何时”声明以进行不完美匹配?