2010-08-09 2 views
1

Я пытаюсь написать регулярное выражение, которое позволит мне разобрать 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 />'; 

} 

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

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

+1

Возможно ли использовать правильный синтаксический анализатор CSV? –

+1

Повторное выражение другого вопроса кажется Perl-совместимым со мной. Я был бы удивлен, если бы это не сработало. –

+0

@mmyers - Я не уверен, какие из них доступны? Я пытался найти что-то в PHP, но я прочитал несколько комментариев, что fgetcsv не работает с CSV, созданным excel. Но я так близко к этому, я просто безнадежен в регулярном выражении. – Abs

ответ

0

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

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

+1

Это также разделило бы на '' несколько слов, здесь '', но '' wont "split, here'. Есть способы обмануть регулярное выражение, чтобы найти маркеры между кавычками, но это не очень хорошо, я боюсь. – Kobi

4

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

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

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

Смежные вопросы