2015-03-25 30 views
1

我在計算regrex表達式以抓取類似文本中的值(粗體突出顯示)時遇到了一些問題。下面是我是收集日誌的一些例子:正則表達式來抓取類似文本中的值

[5439570:00009-01286] 2015年3月3日10時17分31秒錯誤檢查數據庫 郵件/ ABC .NSF:RRV桶腐敗的。

[6946980:00002-00001] 2015年3月14日2時01分25秒SchedMgr:錯誤 遇到在掃描日曆數據庫郵件/ abc.nsf爲 事件:RRV桶已損壞。

[8454294:00002-00001] 2015年3月14日2時01分25秒RnRMgr:遇到錯誤 在掃描數據庫郵件/ abc.nsf事件:RRV桶 損壞。

[7405822:00009-01286] 2015年3月14日0時03分04秒管理進程:路徑: 郵件/ abc.nsf: RRV桶已損壞。

[4260024:00002-00001] 2015年3月14日0時02分17秒無法複製 郵件/ flpilshi.nsf: RRV桶已損壞。

[7405822:00007-00772] 2015年3月13日10時21分36秒管理進程:路徑: /notes09/mail/abc.nsf: RRV桶已損壞。

[12714238:00002-00001] 2015年3月13日5時06分45秒編目無法 打開數據庫郵件/ flpilshi.nsf: RRV桶已損壞。

[9371716:00005-00515] 2015年3月12日5點54分54秒錯誤壓實 郵件/ abc.nsf: RRV桶已損壞。

[9371716:00005-00515] 2015年3月12日5點54分54秒錯誤打開 郵件/ abc.nsf: RRV桶已損壞。

我明白,我可以有像表達抓住從

值 「數據庫RRV(*?)」[5439570:00009-01286] 2015年3月3日10時17分: 31檢查數據庫時出錯 mail/flpilshi.nsf: RRV存儲桶已損壞。

但是我仍然想知道是否有任何單一的regrex表達式可以用來在「RRV存儲桶已損壞」這個句子之前抓住這個值。

感謝您的幫助!

回答

0

你非常接近。例如:

/([^ ]+) RRV bucket is corrupt/ 

應該得到你所需要的東西;它只會抓取出現在該短語之前的所有非空格字符。

然而,這不會像情況下獲得的文件名:

[8454294:00002-00001] 2015年3月14日2時01分25秒RnRMgr:遇到錯誤而掃描數據庫郵件/ ABC .nsf事件:RRV存儲桶已損壞。

如果你想具體的文件名,它可能是更好的定製正則表達式只尋找那些:

/ ([^ ]+\.nsf)/ 
0

您可以使用正則表達式(\/|\b)(\S+)(?:\s+for \S+)?(?=\:\s+RRV)得到的值,並結合值第一和第二組。

請參閱example here。 輸出:

Match 1: 
Group1: 
Group2: mail/abc.nsf 

Match 2: 
Group1: 
Group2: mail/abc.nsf 

Match 3: 
Group1: 
Group2: mail/abc.nsf 

Match 4: 
Group1: 
Group2: mail/abc.nsf 

Match 5: 
Group1: 
Group2: mail/flpilshi.nsf 

Match 6: 
Group1:/
Group2: notes09/mail/abc.nsf 

Match 7: 
Group1: 
Group2: mail/flpilshi.nsf 

Match 8: 
Group1: 
Group2: mail/abc.nsf 

Match 9: 
Group1: 
Group2: mail/abc.nsf