#php #regex
#php #регулярное выражение
Вопрос:
Я пытаюсь создать регулярное выражение PHP для фильтрации моего контента на WordPress. Я хотел бы преобразовать кавычки " "
подобным образом « »
с неразрывным пробелом.
Я также использую фильтр Timber (TWIG) для достижения этой цели.
Проблема в том, что этот фильтр также изменяет url tags
и image tags
.
Пример :
<a href="http://www.example.com">My link</a>
<a href=« http://www.example.com »>My link</a>
Что я мог бы добавить в свое регулярное выражение, чтобы избежать этого? Могу ли я получить некоторую помощь, пожалуйста.
functions.php
public function add_to_twig( $twig ) {
$twig->addExtension( new Twig_Extension_StringLoader() );
$twig->addFilter( new TimberTwig_Filter( 'changemarks', 'changemarks' ) );
return $twig;
}
function changemarks( $text ) {
$regex = '/"(.*?)"/';
$subst = '«amp;#8239;$1amp;#8239;»';
$result = preg_replace($regex, $subst, $text);
return $result;
}
single.twig
{{ post.content|changemarks }}
Комментарии:
1. Вы пытались форматировать только отображаемое содержимое вместо всего DOM ?… Кажется странным шаблоном проектирования
2. Хорошо. Как это сделать?
Ответ №1:
Сложно создать регулярное выражение в html, мое решение — просто выделить строку, сделав некоторое пространство до и после "
текста
$regex = '/ "(. ?)" /';
Комментарии:
1. Спасибо! Это работает очень хорошо. В чем разница между (. ?) и (.*?) ?
2. @Jandon
(.*?)
будет соответствовать любому, даже пустому, но(. ?)
не должно быть пустым, одному или нескольким. Для получения более подробной информации regular-expressions.info