Я согласен с другими, кто сказал, что вы должны использовать функцию fgetcsv вместо регулярных выражений. Регулярное выражение может нормально работать с правильно сформированными данными CSV, но если CSV искажено или повреждено, регулярное выражение будет молча терпеть неудачу, вероятно, возвращая поддельные результаты в процессе.
Тем не менее, вопрос был конкретно об удалении нежелательных кавычек после первоначального разделения. Одно из предложенных решений (пока что) слишком наивно, и оно содержит только экранированные кавычки внутри поля, а не фактические разделители. (Я знаю, что ОП не спрашивал о них, но их нужно удалить, так почему бы не сделать их так же, как другие?) Вот мое решение:
$csv_field = preg_replace('/"(.|$)/', '\1', $csv_field);
Это регулярное выражение соответствует кавычке, за которой следует любой символ или конец строки, и заменяет совпавший символ (ы) вторым символом или пустой строкой, если это было $
, которое соответствовало. Согласно спецификации поля CSV могут содержать разделители строк; похоже, этого не происходит, но вы можете добавить модификатор 's' к регулярному выражению, если вам нужно.