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 № 1Per 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"