Как сделать замену точки с запятой в строке внутри кавычек?

Здравствуйте,

Есть csv файл, такого формата:

текст текст; "текст в двойных кавычках; текст в двойных кавычках; текст в двойных кавычках"; текст; текст
текст текст; "текст в двойных кавычках; текст в двойных кавычках; текст в двойных кавычках"; текст; текст
текст текст; "текст в двойных кавычках; текст в двойных кавычках; текст в двойных кавычках"; текст; текст


Через fgetcsv получил массив вида:

Array
(
[0] = > текст текст; "текст в двойных кавычках; текст в двойных кавычках; текст в двойных кавычках"; текст; текст
[1] = > текст текст; "текст в двойных кавычках; текст в двойных кавычках; текст в двойных кавычках"; текст; текст
)


Теперь нужно каждый элемент разбить по точке с запятой , но так как внутри строки внутри кавычек этот символ тоже встречается, столкнулся с проблемой, как это сделать? Нужна замена только внутри кавычек.

Знаю, что регуляркой, но гугл не смог помочь с примером.
  • Вопрос задан
  • 729 просмотров
Решения вопроса 1
reimax
@reimax Автор вопроса
Собственно решение вопроса:
$string = preg_replace_callback(
				'/"(.*)"/U',
				function ($matches) {
					return str_replace(";", ",", $matches[0]);
				},
				$string
			);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
fgetcsv — Читает строку из файла и производит разбор данных CSV

fgetcsv() принимает используемый разделитель в качестве аргумента и всё сделает сама. По умолчанию в качестве разделителя предполагается запятая, вам нужно указать, что у вас - точка с запятой.
Ответ написан
@stunoff
https://regex101.com/r/7Li7Oi/1
может такое подойдет?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы