/ / Perl regex: Как да заснемем групи в текст? - regex, perl, pipe, regex-group

Perl regex: Как да уловим групи в piped text? - regex, perl, pipe, regex-group

Очаквах изхода на

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

да бъде:

aa

тъй като $ 1 се отнася до първата заснета група, която е "а".

Въпреки това горните кодове извеждат:

(a b c)(a b c)

Какво правя грешно?

Отговори:

4 за отговор № 1

Първо използвайте единични кавички под * 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"

или използвайте контекст на списъка, така че regex връща всички съвпадения наведнъж

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