Я нуждаюсь в помощи некоторых богов 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.
Помощь будет высоко ценится!
В конце концов это сработало!
$postproc = preg_replace('#(DisplayText="|\G(?!\A))([^">]*)"(?!\s*>)#', '$1$2"', $postproc);
Поэтому мне просто нужно было добавить DisplayText, чтобы RegEx не переусердствовал и начал касаться других тегов в XML.
Спасибо всем и особенно revo за эти предложения. Мне кажется, я не смогу поддержать комментарий revo?
Как насчет этого кода:
$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;