用CSV处理逗号

Lor*_*oh. 16 javascript php regex csv soap

我从php中的SOAP调用中获取CSV数据.不幸的是,数据中可能包含逗号.它的格式正确,如

1,名字,2,套索,3,"第一,最后",5,NMEA,......

我需要在php或javascript中将其解析为单个值.我已经浏览了堆栈溢出和其他地方的线程,但没有在php/javascript中找到特定的解决方案.

我目前使用的方法是

$subject = '123,name,456,lryyrt,123213,"first,last",8585,namea3';
$pattern = '/,|,"/';
$t2=preg_replace ('/,|(".*")/','$0*',$subject);
$t2=str_replace(',','*',$t2);
$t2=str_replace('*',',',$t2);
Run Code Online (Sandbox Code Playgroud)

其中*是分隔符,但preg_replace生成额外的*.我尝试了其他一些涉及preg_match和其他preg_功能的方法,但没有成功进行任何类型的干净拆分.

有关如何拆分包含逗号的CSV数据的任何建议?

Mic*_*ski 29

不要尝试使用正则表达式执行此操作.好用str_getcsv()!第三个参数通知str_getcsv()查找引用括起的字段.

$subject = '123,name,456,lryyrt,123213,"first,last",8585,namea3';
$array = str_getcsv($subject, ",", '"');

print_r($array);
// Prints:
Array
(
    [0] => 123
    [1] => name
    [2] => 456
    [3] => lryyrt
    [4] => 123213
    [5] => first,last
    [6] => 8585
    [7] => namea3
)
Run Code Online (Sandbox Code Playgroud)

  • 需要注意的是,str_getcsv在PHP 5.3之前不可用.在此之前使用fgetcsv.如果您没有直接从文件或其他流中获取内容,则可能必须先将其强制转换为流(php://内存,然后写入位置重置)或文件. (3认同)