我要删除'';“在”之间&引用;在php中

我要删除'';“在”之间&引用;在php中,php,regex,arrays,preg-replace,preg-match,Php,Regex,Arrays,Preg Replace,Preg Match,我只想删除“,”和“,”之间的限制。Exmp:“Alibris:书籍、音乐和电影” 第1行的输出应为 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

我只想删除“,”和“,”之间的限制。Exmp:
“Alibris:书籍、音乐和电影”

第1行的输出应为

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,
)
你可以这样做

,(?!([^"]*"[^"]*"[^"]*)+$|[^"]*$)
用空字符串替换它

只有当前面有奇数个
时,它才会匹配。因此,如果介于

所以,应该是这样

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

如果您想用
拆分它,
只使用它的外部
使用

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

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

以下是我建议您采取的方法:

  • 对于文件中的每一行
    • 使用PHP的CSV函数()将该行读入数组
    • 可能使用str_replace修改要修改的数组元素
    • 以CSV格式()写出数组

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

您可以在闭包中使用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+

“您尝试了什么?”您需要显示您的代码,并解释为什么它没有达到您想要的效果。我想根据delimeter在数组中拆分行,但不想拆分为”“我希望您这样做不只是为了在解析CSV文件时偷懒。如果是,请考虑使用或。如果他将该模式与
preg_replace
一起使用,那么应该用什么替换来去除逗号?@Barmar oops..编辑了ans和演示我想根据delimeter在数组中拆分行,但不想拆分为“”@要拆分或替换的intekhabkhan..请与您的question@Barmar你能把密码传给我吗。。为此,我使用以下代码::foreach($khy=>$vae){$vae=str_replace(“,”,“,$vae);}@intekhabkhan,这是因为在foreach$vae中是通过值传递的,而不是通过引用,所以编辑值对原始数组没有任何影响。