匹配不在引号内的逗号

时间:2010-08-09 14:27:36

标签: php regex

我正在尝试编写一个正则表达式,允许我解析excel创建的CSV文件。我注意到当你从excel导出一个CSV时,如果该字段是一个字符串,它将用引号括起来。如果该字符串本身包含引号,它将使用引号转义每个引号!!

我想要做的是将我解析的每一行拆分成字段。鉴于上述情况,当有逗号不在引号内时,我必须拆分。我的正则表达式很糟糕,所以我该怎么做?

我可以用逗号分隔,但是如何说它不在引号之间?

$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兼容的正则表达式语法。

感谢大家的帮助

3 个答案:

答案 0 :(得分:4)

不完全回答你的问题,但可能解决你的问题:

您是否尝试过fgetcsv()str_getcsv()

如果你正在处理CSV数据,他们是你最好的朋友。

答案 1 :(得分:1)

为什么不使用php的内置函数?

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

答案 2 :(得分:0)

此表达式适用于.NET,它应该与Perl兼容:(?<!\"\w*),

输入:some, "text, here"仅在some之后的逗号上返回匹配。