Регулярное выражение для изменения конфликта кавычек

#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