【问题标题】:I want to remove the ',' dellimiter between " " in php [closed]我想删除php中“”之间的“,”分隔符[关闭]
【发布时间】:2013-06-29 08:17:32
【问题描述】:

我只想删除 "" 之间的 ',' 分隔符。例如:"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,
)

【问题讨论】:

  • “你试过什么?”
  • 你需要展示你的代码并解释为什么它没有达到你想要的效果。
  • 我想根据分隔符将行拆分为数组,但不拆分为""
  • 我希望您这样做不是为了在解析 CSV 文件时偷懒。如果是,请考虑改用str_getcsvfgetcsv

标签: php regex arrays preg-replace preg-match


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你可以这样做

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

    用空字符串替换它

    只有在前面有奇数个"时才会匹配。所以如果,"之间,它将匹配,

    DEMO

    原来如此

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

    如果您想将其与, 分开,仅在其外部" 使用

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

    原来如此

    preg_split('/,(?=([^\"]*\"[^\"]*\"[^\"]*)+$|[^\"]*$)/', $text);
    

    【讨论】:

    • 如果他将那个模式与preg_replace 一起使用,应该用什么替换来去掉逗号?
    • @Barmar oops..编辑了答案和演示
    • 我想根据分隔符将行拆分为数组,但不拆分为""
    • @intekhabkhan 您想拆分或替换..请明确您的问题
    • @Barmar 你能把这个的代码传给我吗
    【解决方案3】:

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

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

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

    如果您绝对需要将值作为字符串,您可以使用已实现的 str_putcsv 实现 here

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

    【讨论】:

    • 不工作我正在使用这个代码 :: foreach ($wrong_row as $khy => $vae) { $vae = str_replace(",","",$vae); }
    • @intekhabkhan 那是因为在 foreach 中 $vae 是通过值而不是通过引用传递的,所以编辑值对原始数组没有任何作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多