Я не уверен, правильно ли задать вопрос дважды. Я уже задал следующий вопрос, и я нашел отличное решение. К сожалению, я нашел комбинацию, которая не работает с этим решением. Я много пытался изменить решение, но я не работал. Я также добавил комментарий, но, похоже, никто не замечает этот комментарий, поэтому я должен снова задать свой вопрос:php preg_replace regex заменить символ между двумя символами строки
Я хочу заменить символ в строке, но только если этот символ находится между двумя другими символами. В моем случае я хочу заменить все; которые заключаются между кавычками. Therefor я получил некоторые примеры строк:
asbas; "ASD;"; ASD; asdadasd; "ASD; adsas"
asbas "; ASD:; а" сд; asdadasd; "ASD: adsas; Taras; Адасс
"asbas"; "" ASD:; A "SD"; "asdadasd"; "" ASD: adsas ";" Тарас "" Адасс»
В мой последний вопрос (Question) Я получил следующее решение:
preg_replace ("/(\"[^\";]*);([^\"]*\")/m", "\\1:\\2",
'asbas;"asd;";asd;asdadasd;"asd;adsas"');
Это решение работает отлично, но только в этом случае, когда наличие двойных объектов является eval. Итак, первая строка-строка отлично работает, но не вторая или третья.
Я также попробовал:
preg_replace_callback('/"[^"]+"/',
function ($m) { return str_replace(";", ":", $m[0]); },
$str);
Для clearify мой вопрос: мне нужно регулярное выражение, которое работает с обоих примерных строк и дают следующие результаты:
asbas; "ASD:" ; ASD; asdadasd; "ASD: adsas"
asbas; "ASD ::" сд; asdadasd; "ASD: adsas; тарас; Адасс
"asbas"; "" ASD :: "с.о."; "asdadasd"; "" ASD: adsas ";" Taras ";" Адасс»
ЗАМЕНИТЬ должен иметь место только, когда точка с запятой между двойными кавычками.
Благодарю вас за помощь и ответы.
Сердечные приветы
Маркус
EDIT: Фоновый моего вопроса является предварительной подготовки CSV-файлов. Есть некоторая комбинация, в которой даже excel не знает, как обрабатывать файл «правильно» ... поэтому я пытаюсь изменить какой-то символ и интерпретировать его, поскольку я знаю, что файл должен быть ... так что столбец - это один блок " ... "и разделяется точкой с запятой. И знаю, что я хочу изменить точку с запятой als между блоком двойных кавычек ... проблема возникает, если есть и «-характер в блоке с двумя кавычками. Поэтому мне нужно регулярное выражение, которое даже находит точку с запятой в этом блоке.
Эй, ян. Спасибо за ваш ответ. К несчастью, это не проблема. Ваше решение удаляет каждый; и я хочу только удалить; между двойными кавычками ... Возможно, вы можете сравнить мои ожидаемые результаты. –