按分隔符拆分字符串,但如果字符串被转义,则不拆分字符串
2022-08-30 10:23:08
如何通过分隔符拆分字符串,但如果它被转义,则不能拆分字符串?例如,我有一个字符串:
1|2\|2|3\\|4\\\|4
分隔符是 ,转义分隔符是 。此外,我想忽略转义的反斜杠,所以在 仍然是一个分隔符。|
\|
\\|
|
因此,使用上面的字符串,结果应该是:
[0] => 1
[1] => 2\|2
[2] => 3\\
[3] => 4\\\|4
如何通过分隔符拆分字符串,但如果它被转义,则不能拆分字符串?例如,我有一个字符串:
1|2\|2|3\\|4\\\|4
分隔符是 ,转义分隔符是 。此外,我想忽略转义的反斜杠,所以在 仍然是一个分隔符。|
\|
\\|
|
因此,使用上面的字符串,结果应该是:
[0] => 1
[1] => 2\|2
[2] => 3\\
[3] => 4\\\|4
使用黑魔法:
$array = preg_split('~\\\\.(*SKIP)(*FAIL)|\|~s', $string);
\\\\.
匹配后跟字符的反斜杠,跳过它并匹配分隔符。(*SKIP)(*FAIL)
\|
而不是,IMO更直观地使用某种“扫描”功能,其操作方式类似于词汇分词器。在PHP中,这将是函数。你只是说你想匹配:split(...)
preg_match_all
\
|
\
\
|
以下演示:
$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
)