-1

我想只删除 "" 之间的 ',' 分隔符。示例:"Alibris: Books, Music, & Movies"

第一行的输出应该是

256,2653,"Alibris: Books  Music  & Movies",50263394,05/14/2013,07:44,50263394,114.85,1,5.74,05/14/2013,08:10

这里的数组示例

Array
(
    [0] => 256,2653,"Alibris: Books, Music, & Movies",50263394,05/14/2013,07:44,50263394,114.85,1,5.74,05/14/2013,08:10,
    [1] => 256,2653,"Alibris: Books, Music, & Movies",50327805,05/21/2013,23:03,50327805,-6.99,1,-0.35,05/22/2013,07:10,
    [2] => 256,2653,"Alibris: Books, Music, & Movies",50327805,05/21/2013,23:03,50327805,6.99,1,0.35,05/22/2013,00:10,
    [3] => 527,36777,BuySKU,920130525042340263061,05/24/2013,20:25,1390043,"1,170.73",11,58.54,05/24/2013,20:55,
)
4

3 回答 3

2

这是我建议您采取的方法:

关键是您需要将字符串分解为其组成部分,而不是尝试修改某些逗号而不是其他逗号。

于 2013-07-02T04:53:07.877 回答
1

你可以这样做

,(?!([^"]*"[^"]*"[^"]*)+$|[^"]*$)

用空字符串替换它

这将匹配,只有在前面有奇数个"时才会匹配。因此,,如果它在"

演示

所以,这将是

$pattern = "/,(?!([^\"]*\"[^\"]*\"[^\"]*)+$|[^\"]*$)/"; 
$replace = ""; 
$line = preg_replace($pattern,$replace,$line); 

如果您只想将其拆分为,外部"使用

 ,(?=([^"]*"[^"]*"[^"]*)+$|[^"]*$)

所以它会是

preg_split('/,(?=([^\"]*\"[^\"]*\"[^\"]*)+$|[^\"]*$)/', $text);
于 2013-07-02T04:44:52.870 回答
0

您可以在闭包中使用 str_getcsv 和 str_replace 来完成此操作

$rec = str_getcsv($line);
$rec = array_map(
     function($x){
          return str_replace(",", "", $x); 
     },$rec);

现在你得到了一个数组,你可以在调用 fputcsv 时使用它

如果您绝对需要将值作为字符串,您可以使用此处实施的 str_putcsv 实现。

请注意,这种语法(内联闭包以及 str_getcsv 函数)仅适用于 php 5.3+

于 2013-07-02T04:55:53.620 回答