在两个字符串之间读取多行正则表达式

Multiline RegEx read between two strings

我知道这个问题已经被问过很多次了,我向你保证,我已经阅读了论坛上几乎所有关于 RegEx 的帖子,并尝试了几个小时来寻找解决方案。但最终这件事正在慢慢地但肯定地杀死我! :D 感谢任何帮助。

当我尝试连接到数据库但没有数据库引擎 运行 时,我得到了预期的 connection refused 异常。但是由于未知原因,此异常嵌套了多次(我不知道有多少... 20、30、40 ...!!!)次并且每次都调用 myException.getCause() returns NULL。

出于这个原因,并且因为我不想向用户显示整个堆栈跟踪,我认为使用正则表达式只捕获主要消息会很好且容易。不幸的是,它并不像我预期的那么容易。

首先,您认为通过切断堆栈跟踪中不需要的部分来剥离消息是一个好的解决方案吗?如果没有,你有什么建议?

我的异常看起来像这样:

Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.net.ConnectException
MESSAGE: Connection refused: connect

STACKTRACE:

java.net.ConnectException: Connection refused: connect 
        at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
        at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79) 
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) 
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
        at java.net.Socket.connect(Socket.java:589) 
        at java.net.Socket.connect(Socket.java:538) 
        at java.net.Socket.(Socket.java:434) 
        at java.net.Socket.(Socket.java:244) 
        at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256) 
        at com.mysql.jdbc.MysqlIO.(MysqlIO.java:271) 
        at com.mysql.jdbc.Connection.createNewIO(Connection.java:2771) 
        at com.mysql.jdbc.Connection.(Connection.java:1555) 
        at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285) 
        at java.sql.DriverManager.getConnection(DriverManager.java:664) 
        at java.sql.DriverManager.getConnection(DriverManager.java:247)

............. and so on ............

我尝试了许多不同的模式来获取 EXCEPTION **STACKTRACE 之间的字符串,例如:

EXCEPTION(\r?\n?.*?\r?\n?)*STACKTRACE

EXCEPTION\s*\W*(.*|\r*|\n*)+STACKTRACE

但似乎没有任何效果。

提前致谢

试试这个:(?s)EXCEPTION \*\*\s*(.*?)\s*STACKTRACE.

在 Java 中,那将是 "(?s)EXCEPTION \*\*\s*(.*?)\s*STACKTRACE"

或者可能没有这两个 \s*,以获得更好的性能,trim() 结果。

有关演示,请参阅 regex101