猿问

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

文字是

a,b,c,d\,e,f,g

我想这些分成基于分隔符的数组,,而忽略转义,\,e

["a","b","c", "d,e", "f", "g"]

我试过使用像

explode(',', $data);

但它无法识别\文本中的转义符。如何拆分文本并忽略转义的分隔符?


侃侃无极
浏览 159回答 3
3回答

函数式编程

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;});

慕勒3428872

您可以为此使用正则表达式,它们虽然很好,但是也很难理解。为什么不这样简单一些:$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   = "";    }}我知道这不是一种流行的观点,但是更改实际上可以轻松理解的内容比努力理解密集的正则表达式要有趣得多。当然,这都是非常主观的。
随时随地看视频慕课网APP
我要回答