Как использовать RegEx в фильтре Twig / Timber? - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь использовать preg_replace и регулярное выражение для удаления скобок [ и ] и всех символов внутри них из текстового вывода шаблона Twig v2 с использованием фильтра Twig.

Примером содержимого, выводимого Twig, является

Примером содержимого является [caption id = "attachment_4487" align = "alignright" width = "500"] Lorem Ipsum caption blah blah [/заголовок] и другое содержимое.

Я хочу удалить все, заключенное в скобки [ и ], оставив 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 }}

1 Ответ

0 голосов
/ 04 октября 2018

Проблема в том, что вы заменяете string, а не regex.Конечно, эта строка не будет соответствовать.

Ваша строка с Regex должна выглядеть следующим образом:

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

Теперь вы заменяете соответствие регулярному выражению пустой строкой.

Бонусное редактирование :

Ответ на ваш бонусный вопрос:

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

По сути, он просто удваивает совпадение и сопоставляет все между ними.

Альтернатива, которая является более надежной, если вы всегда используете 'caption':

/\[caption.*/caption\]/
...