首页 > 解决方案 > 正则表达式从树枝模板中提取块

问题描述

在 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...

标签: phpregextwig

解决方案


您可以简单地将与 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;

推荐阅读