2013-03-18 89 views
0

我想匹配我在日誌文件中看到的異常行。日誌文件具有 格式爲「[時間戳]線程ID(8位字母數字)的applicationName(的字母數字字符的任何長度)E(表示異常消息)」php正則表達式匹配日誌文件

因此,一個示例日誌異常消息將是:

「[12年11月27日22:33:02:635 EST] 0000009a MyApplication的E」 任何東西都可以落入E.

我無法找到一個正則表達式匹配此使用PHP的preg_match

後任何幫助,將不勝感激。

乾杯

回答

0

嘗試以下操作:

'/^\[[^\]]+\]\s\w{8}\s[^\s]+\sE.*/m' 

尾隨「M」保證,即在開始楔在日誌行的開頭匹配。

當然,如果除了「E」之外的所有日誌條目看起來都非常相似,那麼這個解決方案當然是可行的。如果有日誌條目,例如沒有時間戳,它可能會失敗,你必須尋找像sputnick的更詳細的表達式。

+0

非常感謝您的幫助:) – froncthetonc 2013-03-19 00:08:38

+0

這工作得很好,但它並沒有之前和之後有超過1個空間字符串匹配'E'例如: 「[3/21/13 13:43:59:396 CDT] 00000075 myApplication E」 有人可以幫忙嗎?我試圖修改'/^\ [[^ \]] + \] \ w {8} [^] + E。*/m'來處理它,但我不能 – froncthetonc 2013-04-18 22:25:53

+0

試試這個: '/^\ [[^ \]] + \] \ S \ W {8} \ S [^ \ S] + \ S + E \ S +。*/M」 – thomas 2013-04-19 11:50:32

0

試試這個正則表達式(與捕獲組):

/^\[\d+/\d+/\d+\s+\d+:\d+:\d+:\d+\s+\w+\]\s+\w{8}\s+\w+\s+E(.*)/