我有一个正则表达式给我一个结果,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
应对零长度匹配.