Как извлечь и напечатать обе эти именованные группы захвата в Perl? - PullRequest
1 голос
/ 27 сентября 2019

Я хочу напечатать оба именованные захваты gclid и session, но мое регулярное выражение завершает работу, как только оно соответствует gclid:

echo '"https://example.com/foo/?gclid=abc1234gef76786" session="765dsfsdf7657657khkjh"' | perl -nE '/(?<gclid>gclid=[^&"#\s]*)|(?<session>session=.*)/&&say"gclid: $+{gclid} session: $+{session}"'

Результаты:

gclid: gclid=abc1234gef76786 session:

Но я хочу:

gclid: gclid=abc1234gef76786 session: session="765dsfsdf7657657khkjh"

echo - это просто пример строки из одного из миллионов, которые будут обработаны.

1 Ответ

2 голосов
/ 27 сентября 2019

Это потому, что вы используете оператор |, поэтому сопоставление регулярному выражению прекращается, когда совпадает любой из двух шаблонов.Вместо этого вы можете использовать .* между двумя шаблонами.Поставьте \b перед session, чтобы обеспечить границу слова:

perl -nE '/(?<gclid>gclid=[^&"#\s]*).*(?<session>\bsession=.*)/&&say"gclid: $+{gclid} session: $+{session}"'
...