/ / Regex Perl: como capturar grupos em texto canalizado? - regex, perl, pipe, grupo regex

Perl regex: Como capturar grupos em texto canalizado? - regex, perl, pipe, regex-group

Eu esperava a saída de

echo "(a b c)(a b c)" | perl -ne "/(a) b/g; print $1"

ser estar:

aa

já que $ 1 refere-se ao primeiro grupo capturado, que passa a ser "a".

No entanto, o código acima gera:

(a b c)(a b c)

O que estou fazendo de errado?

Respostas:

4 para resposta № 1

Primeiro, use aspas simples em * nix, pois não é isso que você deseja:

echo "(a b c)(a b c)" | perl -MO=Deparse -ne "/(a) b/g; print $1"
LINE: while (defined($_ = <ARGV>)) {
/(a) b/g;
print $_;
}

e, em seguida, use o contexto escalar com /g para percorrer todas as correspondências

echo "(a b c)(a b c)" | perl -ne "print $1 while /(a) b/g"

ou use o contexto da lista para que o regex retorne todas as correspondências de uma só vez,

echo "(a b c)(a b c)" | perl -ne "print /(a) b/g"