Подберите запятую, которая не находится в кавычках - PullRequest
1 голос
/ 09 августа 2010

Я пытаюсь написать регулярное выражение, которое позволит мне анализировать файлы CSV, которые создает Excel. Я заметил, когда вы экспортируете CSV из Excel, если поле является строкой, оно будет заключено в кавычки. Если эта строка сама содержит кавычки, она будет экранировать каждую кавычку с кавычкой !!

Что я хочу сделать, это разбить каждую строку, которую я анализирую, на поля. В свете вышесказанного, я должен разделить, когда есть запятая, которая не в кавычках. Мое регулярное выражение ужасно, так как бы я это сделал?

Я могу разделить запятыми, но как мне сказать, что между кавычками нет?

$lines = file($toce_path);

foreach ($lines as $line) {

    $line_array = preg_split("/,/", $line);

    $test = "($line_array[0], $line_array[1], $line_array[2])";

    echo $test.'<br />';

} 

Этот вопрос точно такой же, как у меня, но он не работает с preg_split. Preg_split требует Perl-совместимого синтаксиса регулярных выражений.

Спасибо всем за помощь

Ответы [ 3 ]

4 голосов
/ 09 августа 2010

Не совсем отвечаю на ваш вопрос, но, возможно, решаю вашу проблему:

Вы пробовали fgetcsv () или str_getcsv () ?

Они ваши лучшие друзья, если вы имеете дело с данными CSV.

1 голос
/ 09 августа 2010

Почему вы не используете встроенную функцию php?

http://php.net/manual/en/function.fgetcsv.php

0 голосов
/ 09 августа 2010

Это выражение работает с .NET, который должен быть совместимым с Perl: (?<!\"\w*),

Ввод: some, "text, here" возвращает совпадение только через запятую после some.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...