我有一个CSV文件,我想用PHP解析(不想使用php csv函数,因为它们对我的情况来说太慢了)。我使用preg_replace只选择我需要的列并将输出写回标准输出。我的模式看起来像那样
preg_replace("/^\"([^\"]*)\",\"([^\"]*)\"(.*)$/m", "$1;$2", $content);
CSV中有一些行格式不正确。有没有办法跳过与上述模式不匹配的行的输出?
答案 0 :(得分:2)
你可以分两步完成:
首先删除与正则表达式不匹配的所有行:
preg_replace("/^(?!\"([^\"]*)\",\"([^\"]*)\".*$).*\r?\n/m", "", $content);
然后替换原来的正则表达式。
但是,您需要非常小心。只要您在CSV字段中获得换行符和/或转义引号,这些正则表达式就可能会破坏并销毁您的文件。
或者设想像
这样的格式错误的行"foo","bar (missing quote!)
"baz", "bam" (correct line)
正则表达式现在会删除不完整的和正确的行,因为[^\"]*
也会占用换行符。