使用正则表达式在PHP中解析CSV文件

时间:2014-11-17 09:52:20

标签: php regex csv

我有一个文本文件(类似于CSV概念)来解析并加载到不同的列中。

我从外部应用程序收到它,我无法修改。 它使用&#34 ;;"作为字段分隔符但不幸的是我们在某些内容中也可以使用相同的字符。

这里有一点样本:

Code;Name;Address;E_mail;Contact name
000001;FUTURAMA SNC;VIA BARBAPAPA, 1;info@gmail.com;matteo futuro;
000006;FERRANTIBUS SRL;VIA TOPOLINO, 1;amministrazione@gmail.com;nicola ferri;
000008;MORMORO SPA;VIA CICCETTI, 30;"cri@mormoro.it; rossi@mormoro.it";panebianco gianpietro;

我们使用此代码来解析文件

    $file = fopen("C:\\wamp\\www\\testcsv\\customers.csv","r");
$result ="";
$i=0;

while(! feof($file))
{
    $result[$i++]=  fgets($file);
}

for($j=1;$j<count($result);$j++){
    $tempData = preg_split("/[;]/",$result[$j]);
    print_r( $tempData );
}

如您所见,在示例文件的最后一行中,我们有&#34 ;;&#34;电子邮件字段中的字符....所以它被读作另一个列分隔符,在第三个记录中,电子邮件字段被拆分为2列,结果我有一个额外的列。

有没有办法,使用正则表达式跳过; char是否在&#34;&#34;字符?

提前感谢您的帮助

1 个答案:

答案 0 :(得分:1)

您不应该使用regexpr来解析CSV文件。

使用本机PHP函数http://php.net/manual/en/function.fgetcsv.php

这将解决您的问题。