Поиск конкретного персонажа в группе захвата - PullRequest
0 голосов
/ 02 октября 2018

Мне нужно заменить все двойные кавычки в любой (переменной) заданной строке.

Например:

$text = 'data-caption="hello"world">';
$pattern = '/data-caption="[[\s\S]*?"|(")]*?">/';
$output = preg_replace($pattern, '"', $text);

должно привести к:

"hello"world" 

(Вышеприведенный шаблон - моя попытка заставить его работать)

Проблема в том, что я сейчас не знаю заранее, сколько и сколько двойных кавычек будет в строке.

КакМогу ли я заменить " на quot;?

1 Ответ

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

Вы можете сопоставить строки между data-caption=" и ">, а затем заменить все " внутри этого соответствия на ", используя просто str_replace:

$text = 'data-caption="<element attribute1="wert" attribute2="wert">Name</element>">';
$pattern = '/data-caption="\K.*?(?=">)/';
$output = preg_replace_callback($pattern, function($m) {
        return str_replace('"', '"', $m[0]);
    }, $text);
print_r($output);
// => data-caption="<element attribute1="wert" attribute2="wert">Name</element>">

См. Демонстрация PHP

Подробности

  • data-caption=" - начальный разделитель
  • \K - оператор сброса совпадений
  • .*? - любые 0+ символов, кроме символов разрыва строки, как можно меньше
  • (?=">) - положительный прогноз, требующий подстроки "> непосредственно справа от текущего местоположения.

Совпадение передается анонимной функции внутри preg_replace_callback (доступно через $m[0]), и здесь можно заменить все символы " удобным способом.

...