/ / Perl regex: come catturare i gruppi nel testo in pipe? - regex, perl, pipe, regex-group

Perge regex: come catturare i gruppi nel testo in pipe? - regex, perl, pipe, regex-group

Mi aspettavo l'uscita di

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

essere:

aa

poiché $ 1 si riferisce al primo gruppo catturato, che risulta essere "a".

Tuttavia, il codice sopra riportato produce:

(a b c)(a b c)

Che cosa sto facendo di sbagliato?

risposte:

4 per risposta № 1

Per prima cosa usa le virgolette singole sotto * nix, poiché questo non è ciò che desideri:

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 quindi utilizzare il contesto scalare con /g per scorrere tutte le partite

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

oppure usa il contesto lista in modo che regex restituisca tutte le corrispondenze contemporaneamente,

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