我正在使用正則運算式決議器以標準格式決議 Apache 日志行,并在“size”和“referer”之間添加一個欄位,我稱之為“elapsed”。我無法正確決議“經過”欄位后的欄位。你能幫我嗎?
在橡膠上試試
要決議的行:
10.1.1.1 - - [16/Nov/2022:15:34:38 0000] "GET /server-status HTTP/1.1" 200 32 0 "-" "kube-probe/1.21"
正則運算式:
^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S )(?: (?<path>[^ ]*) \S*)?" (?<code>[^ ]*) (?<size>[^ ]*) (?<elapsed>[^ ]*) (?: "(?<referer>[^\"]*)" "(?<agent>.*)")?
結果:
host 10.121.17.62
user -
time 16/Nov/2022:15:34:38 0000
method GET
path /server-status
code 200
size 32057
elapsed 0
referer
agent
預期結果:
host 10.121.17.62
user -
time 16/Nov/2022:15:34:38 0000
method GET
path /server-status
code 200
size 32057
elapsed 0
referer -
agent kube-probe/1.21
uj5u.com熱心網友回復:
(?: "(?<referer>[^\"]*)" "(?<agent>.*)")?必須洗掉可選的非捕獲組 ( ) 之前的空格,這將解決問題。
但是,我會推薦使用
^(?<host>\S ) \S (?<user>\S ) \[(?<time>[^\]]*)\] "(?<method>\S )(?: (?<path>\S ) \S*)?" (?<code>\S ) (?<size>\S ) (?<elapsed>\S )(?: "(?<referer>[^"]*)" "(?<agent>.*)")?
請參閱正則運算式演示。在這里,我替換[^ ]*為,\S 因為它的意思是匹配一個或多個非空白字符。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/536690.html
標籤:正则表达式阿帕奇解析
