我正在尝试使用preg_replace
和正则表达式使用Twig从Twig v2模板的文本输出中删除括号[
和]
以及其中的所有字符过滤器。
Twig输出的内容的示例是
内容的示例是[caption id =“ attachment_4487” align =“ alignright” width =“ 500”] Lorem Ipsum字幕等等 等等[/ caption]和更多内容。
我想删除[
和]
括号内的所有内容,保留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 }}
答案 0 :(得分:2)
问题是您替换了string
,而不是regex
。当然,该字符串不匹配。
您与Regex的联系应如下:
$string = preg_replace(/\[.*?\]/, '', $string);
现在您要用空字符串替换 regex匹配。
奖金编辑:
您的红利问题的答案:
/\[.*?\].*\[.*?\]/
基本上,它只是使比赛加倍,并且匹配之间的所有内容。
如果您始终使用'caption'
,则更健壮:
/\[caption.*/caption\]/