我期望的输出
echo "(a b c)(a b c)" | perl -ne "/(a) b/g; print $1"
成为:
aa
因为 $1 指的是第一个捕获的组,恰好是“a”。
但是上面的代码输出:
(a b c)(a b c)
我做错了什么?
最佳答案
首先在 *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'
关于regex - Perl 正则表达式 : How to capture groups in piped text?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27747178/