У меня есть регулярное выражение, которое дает мне один результат в 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]
В чем причина этого другого результата?
EDIT:
Кто-то ответил "потому что sed
не perl
". Я знаю это. Причина, по которой я задаю свой вопрос, заключается в том, что я не понимаю, насколько sed
справляется с нулевыми совпадениями.