我想写一个正则表达式,它可以让我解析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兼容的正则表达式语法。
感谢所有的帮助
是否可以使用正确的CSV分析器? – 2010-08-09 14:29:57
另一个问题的正则表达式似乎与Perl兼容。如果它不起作用,我会感到惊讶。 – 2010-08-09 14:32:00
@mmyers - 我不确定哪些是可用的?我曾尝试在PHP中查找某些内容,但是我读了一些评论,指出fgetcsv不适用于由excel创建的CSV。但是我对此非常接近,在正则表达式中我只是没有希望。 – Abs 2010-08-09 14:33:56