繁体   English   中英

为什么这个多行正则表达式包含以下行?

[英]Why does this multi-line regular expression include the following line?

我有以下输入,我想编写一个正则表达式来匹配除第一行和最后一行之外的每一行。

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[\S\s]+?(?=\d{4}(-\d\d){2})" ~/test.log

用简单的英语,我将其描述为:查找带有异常文本的行,然后非贪婪地跟随任何字符(包括换行符),直到我们对日期进行正向预测。

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


在很多情况下,我只会在这样的情况下使用grep -A但问题是主体可以是任意数量的行。

这几乎肯定与工具有关。 正如 pcregrep 的变更日志在“Version 8.12 15-Jan-2011”下所述:

  1. 在 pcregrep 中,当以文字换行序列结尾的模式在多行模式下匹配时,以下行显示为匹配的一部分。 这似乎是错误的,所以我已经改变了它。

一个简单的解决方法是在先行表达式中添加一个换行符,这将把它从匹配中拉出来并防止最后一行显示:

pcregrep -M ".+Exception sending email[\S\s]+?(?=[\r\n]\d{4}(-\d\d){2})" ~/test.log

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM