regex - 仅在超过一定数量时才返回重复的组
问题描述
我正在设置一个正则表达式来查找日志中的空指针异常。正则表达式非常简单:
(java\.lang\.NullPointerException)
这会从我的日志中返回三个组:
2020-01-31 00:00:01 - Searching for account details
Error:
java.lang.NullPointerException
2020-01-31 00:00:30 - Searching for account details
Error:
java.lang.NullPointerException
2020-01-31 00:00:50 - Searching for account details
Error:
java.lang.NullPointerException
我想做的是将其设置为仅在匹配组超过一定数量时才返回结果。例如,(java.lang.NullPointerException){2,} 理论上应该返回两个或更多组的结果,而 {4,} 不应该匹配。到目前为止,我一直在阅读有关为此使用大括号的信息,但除了 {1,} 之外,我无法让它与其他任何东西一起使用 - 其他所有内容都不会返回任何匹配项。
编辑:感谢帕维尔的回答。我对我的用例做了一些修改:
(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\s-\sSearching\sfor\saccount\sdetails\nError:\njava\.lang\.NullPointerException[\s\S]){10,}
此模式将准确匹配从日期到空指针错误的消息。我还删除了*
from [\s\S]
,以确保它只捕获 10 个连续错误。这样,如果有 10 个或更多实例:
2020-01-31 00:00:01 - Searching for account details
Error:
java.lang.NullPointerException
它将返回匹配项。但如果有类似的东西:
2020-01-31 00:00:50 - Searching for account details
Error:
java.lang.NullPointerException
2020-01-31 00:00:50 - Searching for account details
Found something:
Hello world
2020-01-31 00:00:50 - Searching for account details
Error:
java.lang.NullPointerException
hello world
由于消息之间存在消息,因此不会返回匹配项。直到事后我才想到这个用例,所以我没有将它包含在原始问题中。
解决方案
这如您所描述的那样有效:
(java\.lang\.NullPointerException[\s\S]*){2,}
看,您需要将 [\s\S]* 添加到末尾,以便它匹配两个异常之间的所有字符,包括空格。
推荐阅读
- c++ - 您认为我可以如何解决错误 C2664?
- python - Pandas:如何编写一个更快的循环来检查一列,然后根据第一列的值更改另一列的符号?
- python - 不根据 dict 换房间
- json - 使用python将json数据嵌套到数据表中
- c++ - 为什么将浮点表示与精度结合起来不起作用?
- gradle - 如何使用 gradle 将预构建的工件发布到 maven 存储库?
- windows - Powershell-错误:权限被拒绝,以管理员身份运行 ps1 文件时出现 UnauthorizedAccessException
- docker - 无法使用 Docker 在 Mac 中设置 SonarQube
- react-native - react native 0.64.2 npm audit 7 中度警告
- c - 常量存储在内存中的什么位置?