Как мне извлечь и распечатать обе названные группы захвата в perl?

Я хочу напечатать как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 ответ

Решение

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

perl -nE '/(?<gclid>gclid=[^&"#\s]*).*(?<session>\bsession=.*)/&&say"gclid: $+{gclid} session: $+{session}"'
Другие вопросы по тегам