如何在 perl 中提取和打印这两个命名的捕获组?
How do I extract and print both these named capture groups in 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
只是将要处理的数百万行之一的示例行。
那是因为您正在使用 |
运算符,所以当两个模式中的任何一个匹配时,正则表达式匹配就会停止。您可以在两种模式之间使用 .*
代替。将\b
放在session
之前以确保单词边界:
perl -nE '/(?<gclid>gclid=[^&"#\s]*).*(?<session>\bsession=.*)/&&say"gclid: $+{gclid} session: $+{session}"'
我想打印 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
只是将要处理的数百万行之一的示例行。
那是因为您正在使用 |
运算符,所以当两个模式中的任何一个匹配时,正则表达式匹配就会停止。您可以在两种模式之间使用 .*
代替。将\b
放在session
之前以确保单词边界:
perl -nE '/(?<gclid>gclid=[^&"#\s]*).*(?<session>\bsession=.*)/&&say"gclid: $+{gclid} session: $+{session}"'