我要删除'';“在”之间&引用;在php中
我只想删除“,”和“,”之间的限制。Exmp:我要删除'';“在”之间&引用;在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
“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中是通过值传递的,而不是通过引用,所以编辑值对原始数组没有任何影响。