gpt4 book ai didi

java - 正则表达式来获取一切

转载 作者:行者123 更新时间:2023-11-29 09:27:40 25 4
gpt4 key购买 nike

我想在 Servlet 因 Exception java.lang.NullPointerException 失败后打印所有堆栈跟踪。我还使用了 .contains("Servlet failed with Exception")但这并不总是有效,因为很少有 NPE 没有堆栈跟踪。请帮忙!!

public class PatternMatching {
public static final String EXAMPLE_TEST = "<Jul 5, 2017 4:14:28 PM GMT> <Error> <HTTP> <BEA-101020> <[ServletContext@1215989071[app:CeCBS module:/shop path:/shop spec-version:2.5]] "+
"Servlet failed with Exception" +
"java.lang.NullPointerException" +
"at xyz.commerce.catalog.CatalogAccessTools.findLeadItemByBundleSku(CatalogAccessTools.java:770)" +
"at xyz.commerce.catalog.PerformanceMonitoringUKCatalogAccessTools.findLeadItemByBundleSku(PerformanceMonitoringUKCatalogAccessTools.java:436)"+
"at xyz.commerce.catalog.CatalogAccessTools.findLeadItemByBundleSku(CatalogAccessTools.java:760)"+
"at xyz.commerce.catalog.PerformanceMonitoringUKCatalogAccessTools.findLeadItemByBundleSku(PerformanceMonitoringUKCatalogAccessTools.java:426)"+
"at xyz.commerce.catalog.controller.PlansListingController.setChooseAPlan(PlansListingController.java:1505)"+
"Truncated. see log file for complete stacktrace " ;

public static void main(String[] args) {
String Regex = "^Servlet failed with Exception.*\\bat\\b.*";
Pattern p = Pattern.compile(Regex);
Matcher m = p.matcher(EXAMPLE_TEST);


if(m.find())
{
System.out.println("Print succesfull");
//System.out.println(m.start());
//System.out.println(matcher);
}
else
{
System.out.println("Print unsuccesfull");
}
}
}

它应该只打印唯一的堆栈跟踪

at xyz.commerce.catalog.CatalogAccessTools.findLeadItemByBundleSku(CatalogAccessTools.java:770)
at xyz.commerce.catalog.PerformanceMonitoringUKCatalogAccessTools.findLeadItemByBundleSku(PerformanceMonitoringUKCatalogAccessTools.java:436)
at xyz.commerce.catalog.CatalogAccessTools.findLeadItemByBundleSku(CatalogAccessTools.java:760)
at xyz.commerce.catalog.PerformanceMonitoringUKCatalogAccessTools.findLeadItemByBundleSku(PerformanceMonitoringUKCatalogAccessTools.java:426)"+
at xyz.commerce.catalog.controller.PlansListingController.setChooseAPlan(PlansListingController.java:1505)

最佳答案

我认为最重要的是要知道您需要使用 Pattern.DOTALL 参数到 Pattern.Compile 函数,以便 . 匹配换行符。但是,在那种情况下,您可能无法在“Servlet”一词之前使用 ^(我记不太清了,所以您可以随意使用),因为它可能不匹配该行的开头。除此之外,我个人可能会使用 \\S+(注意大写的“S”)来捕获 Exception 类型,它匹配一组 1 个或多个非空白字符。总的来说,我建议

String regex = "Servlet failed with Exception\\s+\\S+\\s+(.*)$"
Pattern p = Pattern.compile(regex, Pattern.DOTALL);

在运行 m.find() 后,您的错误数据将在匹配器对象的匹配组 1 中找到。

我要指出的是,这对您的示例不起作用,因为您没有在几个连接的字符串之间包含空格,但它应该适用于实际输出。

关于java - 正则表达式来获取一切,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45509337/

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