【问题标题】:Parsing a CSV file in PHP using regular expressions [duplicate]使用正则表达式在 PHP 中解析 CSV 文件 [重复]
【发布时间】:2014-11-17 09:52:20
【问题描述】:

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

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

这里有一个小例子:

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 );
}

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

有什么办法,用正则表达式跳过; char 是否在 "" 字符内?

提前感谢您的帮助

【问题讨论】:

  • 当 PHP 已经有 fgetcsv 并爆炸时,为什么还要这样做?
  • $data = fgetcsv($file, 0, ';', '"', '"');

标签: php regex csv


【解决方案1】:

您不应该使用正则表达式来解析 CSV 文件。

使用原生PHP函数http://php.net/manual/en/function.fgetcsv.php

这将解决您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-13
    • 2010-10-02
    • 2019-10-31
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-24
    相关资源
    最近更新 更多