如何在 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\]/
我正在尝试使用 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\]/