正则表达式从类似文本中获取值

时间:2015-03-25 07:27:16

标签: regex

我在查找regrex表达式以获取类似文本中的值(以粗体突出显示)时遇到了一些麻烦。以下是我正在收集的日志的一些示例:

  

[5439570:00009-01286] 03/03/2015 10:17:31检查数据库时出错    mail / abc .nsf:RRV存储桶已损坏。

     

[6946980:00002-00001] 03/14/2015 02:01:25 SchedMgr:错误   扫描日历数据库 mail / abc.nsf 时遇到的问题   事件:RRV存储桶已损坏。

     

[8454294:00002-00001] 03/14/2015 02:01:25 RnRMgr:遇到错误   扫描数据库 mail / abc.nsf 以查找事件:RRV存储桶是   损坏。

     

[7405822:00009-01286] 03/14/2015 00:03:04管理流程:路径:    mail / abc.nsf: RRV存储桶已损坏。

     

[4260024:00002-00001] 03/14/2015 00:02:17无法复制    mail / flpilshi.nsf: RRV存储桶已损坏。

     

[7405822:00007-00772] 03/13/2015 10:21:36管理流程:路径:    /notes09/mail/abc.nsf: RRV存储桶已损坏。

     

[12714238:00002-00001] 03/13/2015 05:06:45 Cataloger无法   打开数据库 mail / flpilshi.nsf: RRV存储桶已损坏。

     

[9371716:00005-00515] 03/12/2015 05:54:54压缩错误    mail / abc.nsf: RRV存储桶已损坏。

     

[9371716:00005-00515] 03/12/2015 05:54:54错误打开    mail / abc.nsf: RRV存储桶已损坏。

据我所知,我可以使用“数据库(。*?)RRV”这样的表达式来抓取

中的值
  

[5439570:00009-01286] 03/03/2015 10:17:31检查数据库时出错    mail / flpilshi.nsf: RRV存储桶已损坏。

但是我仍然想知道是否有任何单一的regrex表达式可以用来在句子“RRV存储桶损坏”之前获取值。

感谢您的帮助!!

2 个答案:

答案 0 :(得分:0)

你非常接近。类似的东西:

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

应该能得到你所需要的东西;它只是抓取在该短语之前出现的所有非空格字符。

然而,在以下情况下,它不会获得文件名:

  

[8454294:00002-00001] 03/14/2015 02:01:25 RnRMgr:扫描数据库mail / abc.nsf时遇到错误:RRV存储桶已损坏。

如果你特别想要文件名,最好定制正则表达式来寻找那些:

/ ([^ ]+\.nsf)/

答案 1 :(得分:0)

您可以使用(\/|\b)(\S+)(?:\s+for \S+)?(?=\:\s+RRV)正则表达式获取值,并合并第1组和第2组的值。

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