gpt4 book ai didi

regex - Fluentd 多个名为 Captures 的正则表达式

转载 作者:行者123 更新时间:2023-12-03 19:56:29 25 4
gpt4 key购买 nike

我们可以连接多个正则表达式命名的捕获吗?

我试图在 fluentd conf 文件中使用以下正则表达式来获取“用户”和“Serial_Number”,但只能获取名字(用户)。

td-agent.conf:

<source>
type tail
format /(?<User>(?<=user:).*?(?=\]))(?<Serial_Number>(?<=sn:).*?(?=\]))/
tag xxxxxx
path /app/logs/xxxx.log
pos_file /var/log/td-agent/xxxx_rolling.pos
</source>

日志文件:
Jul24,11:20:17 TID:6 INFO [user:weblogic] [sn:088039] [dur:806ms] {***message}

我是 fluentD 中这种正则表达式格式的新手,希望能在这个问题上得到任何帮助。

-普拉文

最佳答案

在这种情况下,“连接”不是必需的,您只需要在第一个捕获组和第二个捕获组之间允许一些任意数量的任意字符。

您最好使用否定字符类,并且您需要让 user 和 sn 之间的任何字符:

/(?<User>(?<=user:)[^]]*)\].*?(?<Serial_Number>(?<=sn:)[^]]*)?\]/
^^^^ ^^^^^ ^^^^ ^^

demo
[^]]*否定字符类将匹配 0 个或多个字符,而不是 ].*将匹配 0 个或多个除换行符以外的字符。

如果您需要以任何顺序匹配潜台词,您也可以使用
/^(?=.*(?:(?<User>(?<=user:)[^]]*)))(?=(?:.*(?<Serial_Number>(?<=sn:)[^]]*))?)/

the second demo

关于regex - Fluentd 多个名为 Captures 的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31709546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com