我知道这个问题已被多次询问过,我向您保证,我已经在论坛上阅读了几乎所有关于RegEx的帖子,并试了几个小时才得到解决方案。但最后这件事正在慢慢地但肯定地杀了我! :d 任何帮助表示赞赏。
当我尝试连接数据库并且没有运行数据库引擎时,我按预期得到[1425541012960]
异常。但由于未知原因,这个异常是嵌套的多个(我不知道有多少...... 20,30,40 ...... !!!)次,并且connection refused
的调用每次返回NULL。
由于这个原因,并且因为我不想向用户显示整个堆栈跟踪,所以我认为使用正则表达式捕获主消息会很好很容易。不幸的是,它并不像我预期的那么容易。
首先,您是否认为通过切断堆栈跟踪中不需要的部分来删除消息是一个很好的解决方案?如果没有,你有什么建议?
My Exception看起来像这样:
myException.getCause()
我尝试了很多不同的模式来获取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
但似乎没有任何效果。
提前致谢
答案 0 :(得分:2)
试试这个:(?s)EXCEPTION \*\*\s*(.*?)\s*STACKTRACE
。
在Java中,那将是"(?s)EXCEPTION \\*\\*\\s*(.*?)\\s*STACKTRACE"
。
或者可能没有两个\s*
,以获得更好的效果,trim()
结果。
请参阅regex101了解演示。