RegEx для замены всех вхождений символа между двумя разделителями

Я нуждаюсь в помощи некоторых богов RegEx здесь, поскольку я пытался в течение двух часов и не могу обернуться вокруг этого:

Источник выборки:

DisplayText="cf font="Arial" size="10" complexscriptsfont="Arial" complexscriptssize="10" asiantextfont="Arial" fontcolor="595959"">

Я хочу заменить все экземпляры «на " но только если они находятся внутри ограждения «. То есть выше должно стать:

DisplayText="cf font="Arial" size="10" complexscriptsfont="Arial" complexscriptssize="10" asiantextfont="Arial" fontcolor="595959"">

Точная структура текста внутри DisplayText неизвестна и постоянно меняется, но в любом случае мы не хотим «во внешнем». Как видите, внешние «остаются нетронутыми. Это должно происходить только в строках, начинающихся с DisplayText =» и заканчивающихся «>.

Так что найти строки, которые нужно отредактировать, легко:

/DisplayText\="(.*?)"\>/

Теперь нам просто нужно заменить «на " в Только 1 доллар

Это для PHP.

Помощь будет высоко ценится!

0

Решение

В конце концов это сработало!

$postproc = preg_replace('#(DisplayText="|\G(?!\A))([^">]*)"(?!\s*>)#', '$1$2"', $postproc);

Поэтому мне просто нужно было добавить DisplayText, чтобы RegEx не переусердствовал и начал касаться других тегов в XML.

Спасибо всем и особенно revo за эти предложения. Мне кажется, я не смогу поддержать комментарий revo?

2

Другие решения

Как насчет этого кода:

https://3v4l.org/6qHhb

$str = 'DisplayText="cf font="Arial" size="10" complexscriptsfont="Arial" complexscriptssize="10" asiantextfont="Arial" fontcolor="595959"">';
$splitted = explode('"', $str);
$splittedSize = count($splitted);
$result = $splitted[0].'"'.implode('"',array_slice($splitted,1,$splittedSize-2)).$splitted[$splittedSize-1].'"';
echo $result;
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector