簡體   English   中英

服務器日志的正則表達式模式

[英]Regex pattern for the server log

我從服務器收到以下日志消息,我正嘗試從以下消息中識別正則表達式模式。

2015-10-01T03:14:49.000-07:00 lvn-d1-dev DevServer[9876]: INFO: [EVENT][SEQ=248717] 2015:10:01:03:14:49 101 sign-in_id=11111@psop.com ip_address=1.1.1.1  service_id=IP1234-NPB12345_00 result=RESULT_SUCCESconsole_id=0000000138e91b4e58236bf32besdafasdfasdfasdfsadf  account_id=11111  platform=pik

我使用了以下正則表達式模式

.+\[SEQ=\w+\]\s*(\d+:[\d\d:]+)\s(\d+)\s*.+\=(.+)

使用上述正則表達式模式,我能夠隔離日期(2015:10:01:03:14:49)和ID(101),但無法分別獲得電子郵件(11111@psop.com)和服務ID 。

在我的正則表達式模式字符串中; '\\ ='指向最后一個'='匹配項。 我在這里想念什么嗎? 請幫助我確定正則表達式模式。

正則表達式默認為貪婪。 這就是為什么.+\\=匹配剩余的整個字符串,直到最后一個=

相反,您可以使用非貪婪版本: .+?\\= -注意?

完整的版本如下所示:

.+\[SEQ=\w+\]\s*(\d+:[\d\d:]+)\s(\d+)\s*(.+?)\=(.+)

另外,您不應該使事情復雜化。 正如@InternetUnexplorers答案中已經指出的那樣:您應該使用與所需值關聯的名稱作為錨點,以簡化匹配。 只要不重復任何名稱,例如

.+\[SEQ=\w+\]\s*(\d+:[\d\d:]+)\s(\d+)\s*sign-in_id\=(.+)

會工作。

正則表達式的末尾是問題: .+\\=(.+)

+匹配盡可能多的字符,僅根據需要返回(貪婪)。

.+會匹配所有可能的字符,直到不再滿足\\=(.+)為止。 這就是為什么它匹配最后一個等號。

嘗試僅執行以下操作,而不是僅搜索任何等號:

.*\\[SEQ=\\d+\\] (\\d+:[\\d:]+) (\\d+) sign-in_id=(\\S+) .* service_id=(\\S+)

這些ID按名稱進行匹配,效果更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM