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