首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按分隔符拆分字符串,但如果对其进行转义则不会

按分隔符拆分字符串,但如果对其进行转义则不会
EN

Stack Overflow用户
提问于 2011-06-05 23:16:14
回答 5查看 5.5K关注 0票数 52

如何通过分隔符拆分字符串,但如果字符串被转义则不能?例如,我有一个字符串:

代码语言:javascript
运行
复制
1|2\|2|3\\|4\\\|4

分隔符是|,转义的分隔符是\|。此外,我想忽略转义的反斜杠,因此在\\|中,|仍然是分隔符。

因此,使用上面的字符串,结果应该是:

代码语言:javascript
运行
复制
[0] => 1
[1] => 2\|2
[2] => 3\\
[3] => 4\\\|4
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-06-05 23:20:46

使用黑魔法:

代码语言:javascript
运行
复制
$array = preg_split('~\\\\.(*SKIP)(*FAIL)|\|~s', $string);

\\\\.匹配后跟字符的反斜杠,(*SKIP)(*FAIL)跳过它,\|匹配您的分隔符。

票数 107
EN

Stack Overflow用户

发布于 2011-10-03 02:06:54

split(...)相比,使用某种“扫描”函数更直观,它的操作方式类似于词法记号赋予器。在PHP中,这就是preg_match_all函数。你只需简单地说你想匹配:

后跟|

  • or或|

  • repeat #1或#2的
  1. \\以外的事物至少一次

以下demo:

代码语言:javascript
运行
复制
$input = "1|2\\|2|3\\\\|4\\\\\\|4";
echo $input . "\n\n";
preg_match_all('/(?:\\\\.|[^\\\\|])+/', $input, $parts);
print_r($parts[0]);

将打印:

代码语言:javascript
运行
复制
1|2\|2|3\\|4\\\|4

Array
(
    [0] => 1
    [1] => 2\|2
    [2] => 3\\
    [3] => 4\\\|4
)
票数 11
EN

Stack Overflow用户

发布于 2011-06-06 13:52:09

最近,我想出了一个解决方案:

代码语言:javascript
运行
复制
$array = preg_split('~ ((?<!\\\\)|(?<=[^\\\\](\\\\\\\\)+)) \| ~x', $string);

但黑魔法解决方案的速度仍然快了三倍。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6243778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档