如何在 Twig/Timber 过滤器中使用 RegEx?

How do I use RegEx in a Twig/Timber filter?

我正在尝试使用 preg_replace 和正则表达式从 Twig v2 模板的文本输出中删除括号 [] 以及其中的所有字符一个 Twig 过滤器。

Twig 输出的内容示例是

An example of content is [caption id="attachment_4487" align="alignright" width="500"] Lorem Ipsum caption blah blah[/caption] and more content.

我想删除 [] 括号内的所有内容,留下 Lorem Ipsum caption blah blah 以及 An example of content is

问题是现在,使用过滤器时我根本看不到任何内容。问题可能出在 Twig 的过滤器结构上;但我在日志中没有发现任何错误。我已经在 https://regex101.com/r/sN5hYk/1 测试了正则表达式,但这仍然是问题所在。

现有的 Twig 过滤器 https://twig.symfony.com/doc/2.x/filters/striptags.html 去除 html,但不去除括号。

这是我在functions.php中的过滤函数:

add_filter('timber/twig', function($twig) {
   $twig->addExtension(new Twig_Extension_StringLoader());

   $twig->addFilter(
     new Twig_SimpleFilter(
       'strip_square_brackets', 

        function($string) {

            $string = preg_replace('\[.*?\]', '', $string);
            return $string;
}

 )
   );

   return $twig;
});

并且过滤器在 template.twig 文件中被称为标准方式:

{{ content|strip_square_brackets }}

问题是您替换了 string,而不是 regex。当然,该字符串不会匹配。

你的 Regex 行应该如下所示:

$string = preg_replace(/\[.*?\]/, '', $string);

现在您要用空字符串替换 正则表达式匹配项

奖金编辑:

您的奖励问题的答案:

/\[.*?\].*\[.*?\]/

基本上它只是将匹配项加倍并匹配两者之间的所有内容。

如果您始终使用 'caption':

,则更强大的替代方案
/\[caption.*/caption\]/