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

时间:2018-10-03 22:02:11

标签: php regex twig timber

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

Twig输出的内容的示例是

  

内容的示例是[caption id =“ attachment_4487”   align =“ alignright” width =“ 500”] Lorem Ipsum字幕等等   等等[/ caption]和更多内容。

我想删除[]括号内的所有内容,保留Lorem Ipsum caption blah blahAn 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 }}

1 个答案:

答案 0 :(得分:2)

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

您与Regex的联系应如下:

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

现在您要用空字符串替换 regex匹配

奖金编辑

您的红利问题的答案:

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

基本上,它只是使比赛加倍,并且匹配之间的所有内容。

如果您始终使用'caption',则更健壮:

/\[caption.*/caption\]/