Как мне извлечь и распечатать обе названные группы захвата в 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}"'