errorString="AxisFault\n
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.generalException\n
faultSubcode: \n
faultString: My Error\n
faultActor: \n
faultNode: \n
faultDetail: \n
{}string: this is the fault detail"
Pattern pattern = Pattern.compile(".*faultString(.*)", Pattern.DOTALL);
Matcher matcher = pattern.matcher(errorString);
if (matcher.matches()) {
String match = matcher.group(1);
return match;
}
Run Code Online (Sandbox Code Playgroud)
我想得到"我的错误",但它返回到整个字符串的末尾,而不是匹配到faultString行末尾的\n.我已经尝试了许多技术让它在线路末端停止,但没有成功.
谢谢
你不应该过去Pattern.DOTALL; 这会导致换行符匹配.*,这正是你不想要的.
一个更好的正则表达式是:
Pattern pattern = Pattern.compile("faultString: (.*)");
Run Code Online (Sandbox Code Playgroud)
然后,而不是matcher.matches()使用,find()以查看它是否出现在字符串中的任何位置.
另请注意,我已将正则表达式修改为仅对"我的错误"部分进行分组,而不是像您原来那样对"我的错误"进行分组.
为了清楚起见,这是我测试的代码:
Pattern pattern = Pattern.compile("faultString: (.*)");
Matcher matcher = pattern.matcher(errorString);
if (matcher.find()) {
System.out.println(matcher.group(1));
}
Run Code Online (Sandbox Code Playgroud)
这里errorString是你的一样.
输出是:
My Error