【问题标题】:PHP regular expression to parse a CSV line [duplicate]PHP正则表达式解析CSV行[重复]
【发布时间】:2020-04-06 12:38:47
【问题描述】:

使用:PHP 7

我需要解析 CSV 文件中的字符串并返回数组中的值。我正在使用 preg_match_all,但到目前为止还没有运气。

这是字符串:

"494","1","41","2009-05-18","NULL","0","3","JONES,ZACK ZX",""

这是 PHP 代码:

<?php
 $s = '"494","1","41","2009-05-18","NULL","0","3","JONES,ZACK ZX",""' ;

 $p =  '(?<=^|,)(?:[^,"]+|")?(?=,|$)|(?<=^|,)".*?"(?=,|$)';

 $m = Array();

 $e = preg_match_all($p, $s, $m);

执行后,$m 数组应包含所有字符串值,不包含双引号字符串包围字符。

在获得正确使用的正则表达式方面提供任何帮助。

【问题讨论】:

  • 我能问一下你为什么使用正则表达式,而不是像str_getcsv这样的东西吗?
  • @iainn 我试过 str_getcsv,它没有产生正确的结果。
  • Regex 不是这个工具。 PHP 的内置 CSV 解析功能没有理由在您提供的数据集这样简单的数据集上产生意想不到的结果。尝试在正则表达式中重新创建 CSV 解析器(尤其是包括所有边缘情况和转义序列)就像重新发明一个完美的轮子。
  • @iainn 我再次尝试了 str_getcsv,它成功了!我将在下面发布我的答案。

标签: php regex preg-match-all


【解决方案1】:

按照 iainn 的建议,我尝试了str_getcsv,它成功了!

答案如下:

$m = str_getcsv($s, ",", "\"");

【讨论】:

    猜你喜欢
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 2011-01-23
    • 2012-11-21
    • 2014-10-28
    • 2010-10-02
    相关资源
    最近更新 更多