为什么这个正则表达式在sed中的运行方式与Perl/Ruby不同?

 L-Darin_209 发布于 2023-02-08 14:38

我有一个正则表达式给我一个结果,sed但在Perl(和Ruby)中有另一个结果.

我有字符串one;two;;three,我想突出显示由;.分隔的子字符串.所以我在Perl中执行以下操作:

$a = "one;two;;three";
$a =~ s/([^;]*)/[\1]/g;
print $a;

(或者,在Ruby中:print "one;two;;three".gsub(/([^;]*)/, "[\\1]").)

结果是:

[one][];[two][];[];[three][]

(我知道虚假空子串的原因.)

奇怪的是,当我运行相同的正则表达式时,sed我得到了不同的结果.我跑:

echo "one;two;;three" | sed -e 's/[^;]*/[\0]/g'

我得到:

[one];[two];[];[three]

造成这种不同结果的原因是什么?

编辑:

有人回答"因为sed不是perl".我知道.我问我的问题的原因是因为我不明白如何sed应对零长度匹配.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有