gpt4 book ai didi

regex - 使用正则表达式提取堆栈跟踪的最后 'Caused by'

转载 作者:行者123 更新时间:2023-12-04 14:47:33 32 4
gpt4 key购买 nike

不幸的是,我还不是正则表达式专家,因此遇到了以下问题:假设我有一个包含多个链式异常的 Java 堆栈跟踪,我想要达到的是提取以“Caused by”开头的最后一行。

javax.servlet.ServletException: Something bad happened
at com.example.myproject.OpenSessionInViewFilter.doFilter(OpenSessionInViewFilter.java:60)
.
.
Caused by: com.example.myproject.MyProjectServletException
.
.
Caused by: This is the line I want to capture

到目前为止,我发现 Caused by.(?!.*Caused by) 基于负面前瞻,在我之后给了我最后一个“Caused by”(但不是该行的其余部分)已删除所有制表符和空格。有什么方法可以给我想要的结果吗?如果必须删除所有空格,那对我来说没问题。谢谢!

编辑:抱歉,我想我忘记了一些非常重要的事情。在 Java 中使用“substring”将是一个完美的解决方案,但我需要的是一个正则表达式,我可以将其用于 Logstash 中的 grok 模式。

最佳答案

这是一个基于贪婪量词的非环视解决方案:

\A[\s\S]*\nCaused by:\s*(?<LastCausedBy>.*)\Z

参见 the regex demo

模式匹配

  • \A - 字符串的开头
  • [\s\S]* - 尽可能多的任何 0+ 个字符(实际上,捕获所有文本到末尾然后向后移动 - 回溯 - 找到最后一个......)
  • \nCaused by: - 换行符后跟 Caused by:
  • \s* - 0+ 个空白符号
  • (?<LastCausedBy>.*) - 除换行符外的任何 0+ 个字符(捕获到 LastCausedBy 命名组
  • \Z - 字符串结束

测试于 Grok Debugger :

enter image description here

关于regex - 使用正则表达式提取堆栈跟踪的最后 'Caused by',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36268664/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com