我在查找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存储桶损坏”之前获取值。
感谢您的帮助!!
答案 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