Regex 为什么这个多行正则表达式包含以下行?
我有以下输入,我想写一个正则表达式,它将匹配除第一行和最后一行之外的每一行Regex 为什么这个多行正则表达式包含以下行?,regex,pcre,pcregrep,Regex,Pcre,Pcregrep,我有以下输入,我想写一个正则表达式,它将匹配除第一行和最后一行之外的每一行 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 [I
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
用通俗易懂的英语,我会这样描述:寻找一行带有异常文本的行,后跟任何字符(包括换行符),不贪婪地,直到我们找到一个积极的日期前瞻
出于某种原因,这也包括最后一行,即使。我错过了什么
在很多情况下,我只会在这样的情况下使用
grep-a
,但问题是主体可以是任意数量的行 这几乎肯定与工具有关。正如pcregrep在“2011年1月15日8.12版”中所述:
pcregrep -M ".+Exception sending email[\S\s]+?(?=[\r\n]\d{4}(-\d\d){2})" ~/test.log
尝试:[\S\S]+而不是[.\S]+-该点在括号内时是一个文字点。它在regex101上工作,因为regex选项
gm
也。。。如果在你的邮件正文中有一行以日期开头呢?@JorgeCampos我有多行标志,但全局标志在概念上并不适用于*grep,对吗?是的,我已经考虑过了。电子邮件的内容在实践中是不会发生的。可以安全地忽略它。我根据您的输入测试了您的正则表达式,它确实在我的Debian设置中返回了预期结果(pcregrep版本8.39 2016-06-14
)。您是否使用此精确输入进行测试?@CoffeeNinja是的,输入与此处列出的相同。版本稍旧,但我无权更改:pcregrep版本7.8 2008-09-05
聪明!谢谢。谢谢。