如何在Java中使用正则表达式提取此字符串?

phi*_*son 2 java regex

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.我已经尝试了许多技术让它在线路末端停止,但没有成功.

谢谢

Mic*_*ers 8

你不应该过去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