Perl 正则表达式:如何捕获管道文本中的组?
Perl regex: How to capture groups in piped text?
我期待
的输出
echo "(a b c)(a b c)" | perl -ne "/(a) b/g; print "
成为:
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 "
LINE: while (defined($_ = <ARGV>)) {
/(a) b/g;
print $_;
}
然后使用带有 /g
的标量上下文来遍历所有匹配项
echo "(a b c)(a b c)" | perl -ne 'print while /(a) b/g'
或使用列表上下文,以便正则表达式 returns 一次匹配所有,
echo "(a b c)(a b c)" | perl -ne 'print /(a) b/g'
我期待
的输出echo "(a b c)(a b c)" | perl -ne "/(a) b/g; print "
成为:
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 "
LINE: while (defined($_ = <ARGV>)) {
/(a) b/g;
print $_;
}
然后使用带有 /g
的标量上下文来遍历所有匹配项
echo "(a b c)(a b c)" | perl -ne 'print while /(a) b/g'
或使用列表上下文,以便正则表达式 returns 一次匹配所有,
echo "(a b c)(a b c)" | perl -ne 'print /(a) b/g'