regex - Perl 正则表达式 : How to capture groups in piped text?

标签 regex perl pipe regex-group

我期望的输出

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/

相关文章:

regex - 正则表达式条件否定的.htaccess中的RewriteCond无法正常工作?

php - 相当于 PHP preg_replace 的 JavaScript

windows - 使用 Strawberry Perl 安装模块

c - pipeline()-ing 程序会导致 EIO

ios - 在 Swift 中,如何检测 "emoji tag"?

用户名的正则表达式,允许数字、字母和空格

perl - 在管道 Perl 执行中捕获 tee 的参数

perl - 使用 Perl 比较两个远程文件

c++ - 将文件名从 linux 中的标准输入管道传输到 C++

python - 在 Python 中查看是否有来自管道的输入?