1

我有一个 CSV 文件,我想使用 PHP 解析(不想使用 php csv 函数,因为它们对我来说太慢了)。我使用 preg_replace 仅选择我需要的列并将输出写回标准输出。我有一个看起来像这样的模式

preg_replace("/^\"([^\"]*)\",\"([^\"]*)\"(.*)$/m", "$1;$2", $content);

CSV 中有一些行格式错误。有没有办法跳过与上述模式不匹配的行的输出?

4

1 回答 1

2

您可以分两步完成:

首先删除所有与您的正则表达式不匹配的行:

preg_replace("/^(?!\"([^\"]*)\",\"([^\"]*)\".*$).*\r?\n/m", "", $content);

然后做原来的正则表达式替换。

但是,您需要非常小心。一旦您在 CSV 字段中出现换行符和/或转义引号,这些正则表达式可能会破坏并破坏您的文件。

或者想象一条畸形的线,比如

"foo","bar (missing quote!)
"baz", "bam" (correct line)

正则表达式现在将删除不完整的行正确的行,因为[^\"]*也会吃掉换行符。

于 2013-01-21T11:27:33.667 回答