我有一个字符串,用户可以使用逗号分割。
例如,字符串value1,value2,value3
应该生成数组:
["value1", "value2", "value3"]
现在如果用户希望允许逗号作为子字符串怎么办?我想通过让用户使用两个逗号或反斜杠来逃避逗号来解决该问题。例如,字符串
“嗨,Stackoverflow”将被写为“Hi ,, Stackoverflow”或“Hi \,Stackoverflow”。
但我觉得很难评估这样的字符串。我尝试过preg splitting,但是没有办法看看一个lookbehind或lookahead系列字符是由偶数还是奇数组成。此外,还必须删除用于转义的反斜杠和双逗号,这可能需要额外的替换功能。
答案 0 :(得分:1)
$text = 'Hello, World \,asdas, 123';
$data = preg_split('/(?<=[^\\\]),/',$text);
print_r($data);
结果
Array ( [0] => Hello [1] => World \,asdas [2] => 123 )
答案 1 :(得分:0)
为此,我将运行preg_replace_callback
,它允许您计算使用的转义字符并确定如何处理它们。如果事实证明昏迷没有被转义,请将其替换为某些不可打印的字符,用户不应在其输入中使用该字符,然后使用此字符进行爆炸:
<?php
$str = "One,Two\\, Two\\\\,Three";
$delimiter = chr(0x0B); // vertical tab, hope you do not expect it in the input?
$escaped = preg_replace_callback('/(\\\\)*,?/', function($m) use($delimiter){
if(!isset($m[1]) || strlen($m[0])%2) {
return str_replace(',',$delimiter,preg_replace('/\\\\{2}/','\\',$m[0]));
} else {
return str_replace('\\,',',', preg_replace('/\\\\{2}/','\\',$m[0]));
}
}, $str);
$array = explode($delimiter, $escaped);