为什么此多行正则表达式包括以下行



我有以下输入,我想编写一个正则表达式,该表达式将与第一条和最后一行匹配。

2019-03-13 00:33:44,846 [INFO] -:  foo
2019-03-13 00:33:45,096 [INFO] -:  Exception sending email
To:
[foo@bar.com, bar@bar.com]
CC:
[baz@bar.com]
Subject:
some subject
Body:
some
body
2019-03-13 00:33:45,190 [INFO] -:  bar

我认为以下内容应起作用,但它与任何内容都不匹配:

pcregrep -M ".+Exception sending email[Ss]+?(?=d{4}(-dd){2})" ~/test.log

用简单的英语我将其描述为:寻找一个异常文本的行,其次是任何角色(包括newlines),直到我们达到一个正面的lookahead。

由于某种原因,这也包括最后一行,即使它不在Regex101上。我在这里缺少什么?


在很多情况下,我只会在这种情况下使用grep -A,但问题是身体可能是任何任意数量的线路。

这几乎可以肯定与该工具有关。作为" 8.12版15-17-17-17-17-17-17-17-17-17-17-1月15日"下的PCREGREP状态的变形值:

  1. 在pcregrep中,当以字面新线序列结尾的模式为 以多行模式匹配,以下行显示为 匹配。这似乎是错误的,所以我更改了它。

一个简单的修复方法是在LookAhead表达式中添加一个newline字符,该字符将其退出比赛并防止最后一行显示:

pcregrep -M ".+Exception sending email[Ss]+?(?=[rn]d{4}(-dd){2})" ~/test.log

最新更新