我正在尝试使用regexserde解析带有正则表达式的web日志。它的工作原理是将每个regex组与表中的一列相匹配,如果regex组为空,则为该列指定null。
我在匹配缺少字段的日志行时遇到问题。此日志中有两种类型的行:
<134>2016-10-23T23:59:59Z cache-iad2134 fastly[502801]: 52.55.94.131 "-" "-" Sun, 23 Oct 2016 23:59:59 GMT GET /apps/events/2016/10/11/3062653/?REC_ID=3062653&id=0 200
<134>2016-10-23T23:59:59Z cache-dfw1835 fastly[502801]: 1477267199
我编写了下面的正则表达式,它将第一种类型的行与所有字段相匹配:
^(\\S+) (\\S+) (\\S+) (\\S+) "(\\S+)" "(\\S+)" (.*) (\\d{3})
但我和他一起玩 ?
使正则表达式可以选择性地忽略前4个字段之后的字段,但会不断弄乱列。
关于如何添加 ?
不改变组的数量(这样反序列化程序就不会出现问题了)?或者你建议的其他方法?
1条答案
按热度按时间x7rlezfr1#
在前4个字段之后的所有字段周围放置一个非捕获组,并使其成为可选的。
放
?:
在一个组开始时,使其不被捕获。所以这个组不会影响被捕获的组的数量。