为了账号安全,请及时绑定邮箱和手机立即绑定

将用逗号分隔的文本拆分为一个数组,但忽略转义的定界符\,

将用逗号分隔的文本拆分为一个数组,但忽略转义的定界符\,

PHP
侃侃无极 2021-05-12 15:14:21
文字是a,b,c,d\,e,f,g我想这些分成基于分隔符的数组,,而忽略转义,像\,e["a","b","c", "d,e", "f", "g"]我试过使用像explode(',', $data);但它无法识别\文本中的转义符。如何拆分文本并忽略转义的分隔符?
查看完整描述

3 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

Wihout正则表达式


$ignore = '\\';

$arr = explode(',','a,b,c,d\,e,f,g');

array_walk($arr, function(&$v, $k) use ($ignore,&$arr){

  if(strpos($v, $ignore)){ 

   $v = str_replace($ignore, ',', $v).$arr[$k+1];

   unset($arr[$k+1]);

  }

 return $v;

});


查看完整回答
反对 回复 2021-05-21
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

您可以为此使用正则表达式,它们虽然很好,但是也很难理解。为什么不这样简单一些:


$input  = "a,b,c,d\,e,f,g,h\,i\,j,k,l,m";

$output = [];

$buffer = "";


foreach (explode(",", $input) as $part) {

    if (substr($part, -1) == "\\") $buffer .= $part;

    else {

       $output[] = $buffer . $part;

       $buffer   = "";

    }

}


print_r($output);

这不会删除反斜杠,但是现在很容易添加或删除反斜杠。这与删除它们的算法相同:


foreach (explode(",", $input) as $part) {

    if (substr($part, -1) == "\\") $buffer .= substr($part, 0, -1) . ',';

    else {

       $output[] = $buffer . $part;

       $buffer   = "";

    }

}

我知道这不是一种流行的观点,但是更改实际上可以轻松理解的内容比努力理解密集的正则表达式要有趣得多。当然,这都是非常主观的。


查看完整回答
反对 回复 2021-05-21
  • 3 回答
  • 0 关注
  • 158 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信