2

RegexSerDeを使用して正規表現で Web ログを解析しようとしています。各正規表現グループをテーブル内の列と照合することで機能し、正規表現グループが空の場合、その列に null を割り当てます。

欠落しているフィールドとログ行を一致させるのに問題があります。このログには、次の 2 種類の行があります。

<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 の後のフィールドをオプションで無視するように正規表現を取得するためにいじりましたが、列を台無しにし続けました。

?グループの数を変更せずに (デシリアライザーが咳をしないように)を追加する方法について何か提案はありますか? または、これを行う他の方法はありますか?

4

1 に答える 1

1

最初の 4 つ以降のすべてのフィールドを非キャプチャ グループで囲み、オプションにします。

^(\\S+) (\\S+) (\\S+) (\\S+)(?: "(\\S+)" "(\\S+)" (.*) (\\d{3}))?

グループの先頭に置く?:と、非キャプチャになります。したがって、このグループは、キャプチャされるグループの数には影響しません。

于 2016-10-28T01:30:29.193 に答える