正则表达式匹配AND条件中的两个字符串

时间:2012-06-04 19:26:09

标签: regex string match

我是正则表达式的新手,请在错误情况下帮助我,我需要使用正则表达式来匹配来自日志文件的AND条件中的两个错误消息(出现在不同的行,但是相同的段落):

Msg1 - ERROR [com.company.util.ejb.TimedBean] () FAILED processing Loader

Msg2 - java.lang.RuntimeException: Message code:[SL] is unknown.

基本上,我需要的是匹配(msg1)&&(msg2),在这种情况下,(ERROR ... Loader)将出现在第一行,(java ... unknown)将在下一行中出现。消息将始终遵循此顺序。我不是用这里的任何典型语言编程,它们将被放入一个接受regexp的企业工具中。

如果可能的话,您是否还会告诉我如何将其设置为(msg1)||(msg2)?或

1 个答案:

答案 0 :(得分:1)

理论上,匹配两个连续的行只是将两个正则表达式端到端地放在一起。因此,为了说明的目的,假设您有一个名为logfile.txt的文件,其中包含您正在查找的消息。然后从Linux命令行可以执行以下操作:

pcregrep -M -o '^ERROR\N*Loader$\njava\N*unknown\.$\n' logfile.txt

它将打印您正在寻找的线对。将其分解为部分:

  • ^ERROR匹配行首的ERROR字样。
  • \N*匹配任何不是行终止符的字符数。
  • Loader$匹配一行末尾的Loader一词。
  • \n匹配换行符。 (在Windows上可能会有所不同。)
  • java\N*unknown\.$\n更像是一样。

但是......这是一个大问题......处理正则表达式的工具必须能够进行多行匹配,并且必须打开该功能。 (这是-M pcregrep命令行选项启用的功能。)许多regexp工具(如许多系统上的普通grep)都无法进行多行搜索。所以你可能运气不好。