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

Regex 正则表达式以匹配和条件中的两个字符串,regex,string,match,Regex,String,Match,我不熟悉正则表达式,请在错误场景中帮助我,我需要使用正则表达式匹配日志文件中的两条错误消息(出现在不同的行中,但段落相同): Msg1-错误[com.company.util.ejb.TimedBean]()处理加载程序失败 Msg2-java.lang.RuntimeException:消息代码:[SL]未知。 基本上,我需要的是匹配(msg1)&&(msg2),在这种情况下,(ERROR…Loader)将出现在第一行,而(java…unknown)将出现在下一行。消息将始终遵循此顺序。我在这

我不熟悉正则表达式,请在错误场景中帮助我,我需要使用正则表达式匹配日志文件中的两条错误消息(出现在不同的行中,但段落相同):

Msg1-错误[com.company.util.ejb.TimedBean]()处理加载程序失败

Msg2-java.lang.RuntimeException:消息代码:[SL]未知。

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


如果可能的话,请您也告诉我如何使其处于或条件为
(msg1)|(msg2)

匹配两个连续的行,理论上,只是将两个正则表达式端到端的问题。为了便于说明,假设您有一个名为
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
命令行选项对
pcregremp
的支持。)许多regexp工具,例如许多系统上的plain
grep
,无法进行多行搜索。所以你可能运气不好。

不清楚你想要实现什么。。。你能解释清楚吗?谢谢csd。我不知道为什么,但是“\N”在我的工具中不起作用(可能我没有正确地使用它)。我能够启用多行匹配功能。我使用的最后一个regexp是
/(ERROR.*\n)。+(java\.lang\.RuntimeException\:消息代码\:\[SL\]未知。*\n)/I
-它看起来没有你的效率高,但对我来说很有效!隐马尔可夫模型。。。这里有一个更好的方法:
/ERROR.+java\.lang\.RuntimeException\:消息代码\:\[SL\]未知/s
如果不支持
\N
,您可以将其编写为
[^\N]
(即非
\N
的字符类)。您可能希望这样做(而不是仅仅使用
+
)的原因是您不希望正则表达式从文件的顶部一直匹配到底部的最后一个匹配。