regex - 如何在 Perl 中提取并打印这些命名捕获组?

标签 regex perl named-captures

我想打印两者gclidsession命名的捕获,但是我的正则表达式一旦与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}"'

关于regex - 如何在 Perl 中提取并打印这些命名捕获组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58134467/

相关文章:

perl - 为什么不安装DBI?

javascript - RegEx 用原生 JS 分割查询字符串

regex - ?>(原子分组)正则表达式构造的实际应用?

arrays - 将多个局部变量分配给 perl 中的数组条目

perl - 将 select(2) 和文件句柄的缓冲 IO 结合起来是否安全?

regex - 可以使用 Perl 的 grep 和正则表达式返回捕获

python - 如何匹配python中正则表达式中字符串列表中的任何字符串?

regex - 完成后,Perl的 `(?PARNO)`是否会丢弃其自己的命名捕获?

regex - 如何按名称访问捕获组?