如何通过分隔符拆分字符串,但如果字符串被转义则不能?例如,我有一个字符串:
1|2\|2|3\\|4\\\|4分隔符是|,转义的分隔符是\|。此外,我想忽略转义的反斜杠,因此在\\|中,|仍然是分隔符。
因此,使用上面的字符串,结果应该是:
[0] => 1
[1] => 2\|2
[2] => 3\\
[3] => 4\\\|4发布于 2011-06-05 23:20:46
使用黑魔法:
$array = preg_split('~\\\\.(*SKIP)(*FAIL)|\|~s', $string);\\\\.匹配后跟字符的反斜杠,(*SKIP)(*FAIL)跳过它,\|匹配您的分隔符。
发布于 2011-10-03 02:06:54
与split(...)相比,使用某种“扫描”函数更直观,它的操作方式类似于词法记号赋予器。在PHP中,这就是preg_match_all函数。你只需简单地说你想匹配:
后跟|
|
\或\以外的事物至少一次以下demo:
$input = "1|2\\|2|3\\\\|4\\\\\\|4";
echo $input . "\n\n";
preg_match_all('/(?:\\\\.|[^\\\\|])+/', $input, $parts);
print_r($parts[0]);将打印:
1|2\|2|3\\|4\\\|4
Array
(
[0] => 1
[1] => 2\|2
[2] => 3\\
[3] => 4\\\|4
)发布于 2011-06-06 13:52:09
最近,我想出了一个解决方案:
$array = preg_split('~ ((?<!\\\\)|(?<=[^\\\\](\\\\\\\\)+)) \| ~x', $string);但黑魔法解决方案的速度仍然快了三倍。
https://stackoverflow.com/questions/6243778
复制相似问题