我期待
的输出echo "(a b c)(a b c)" | perl -ne "/(a) b/g; print $1"
是:
aa
因为1美元是指第一个被捕获的群体,恰好是" a"。
但是上面的代码输出:
(a b c)(a b c)
我做错了什么?
答案 0 :(得分:4)
首先在* nix下使用单引号,因为这不是您想要的:
echo "(a b c)(a b c)" | perl -MO=Deparse -ne "/(a) b/g; print $1"
LINE: while (defined($_ = <ARGV>)) {
/(a) b/g;
print $_;
}
然后使用带有/g
的标量上下文迭代所有匹配
echo "(a b c)(a b c)" | perl -ne 'print $1 while /(a) b/g'
或使用列表上下文,因此正则表达式一次返回所有匹配项,
echo "(a b c)(a b c)" | perl -ne 'print /(a) b/g'