Java 如何使用正则表达式提取字符串的一部分

Java 如何使用正则表达式提取字符串的一部分,java,regex,Java,Regex,我正在尝试提取最后三个字符串,即05、06、07。然而,我的正则表达式正以另一种方式工作,即提取前三个字符串。有人能帮我纠正代码中的错误吗 Pattern p = Pattern.compile("^((?:[^,]+,){2}(?:[^,]+)).+$"); String line = "CgIn,f,CgIn.util:srv2,1,11.65,42,42,42,42,04,05,06,07"; Matcher m = p.matcher(line); String result; if (

我正在尝试提取最后三个字符串,即05、06、07。然而,我的正则表达式正以另一种方式工作,即提取前三个字符串。有人能帮我纠正代码中的错误吗

Pattern p = Pattern.compile("^((?:[^,]+,){2}(?:[^,]+)).+$");
String line = "CgIn,f,CgIn.util:srv2,1,11.65,42,42,42,42,04,05,06,07";
Matcher m = p.matcher(line);
String result;
if (m.matches()) {
    result = m.group(1);
}
System.out.println(result);
我的当前输出:

CgIn,f,CgIn.util:srv2
05,06,07
预期输出:

CgIn,f,CgIn.util:srv2
05,06,07
你可以把它修好

Pattern p = Pattern.compile("[^,]*(?:,[^,]*){2}$");
String line = "CgIn,f,CgIn.util:srv2,1,11.65,42,42,42,42,04,05,06,07";
Matcher m = p.matcher(line);
String result = "";
if (m.find()) {
    result = m.group(0);
}
System.out.println(result);

正则表达式是

[^,]*(?:,[^,]*){2}$

图案细节

  • [^,]*
    -0+字符,而不是
  • (?:,[^,]*){2}
    -2次重复
    • -逗号
    • [^,]*
      -0+字符,而不是
  • $
    -字符串结束
请注意,应该将
Matcher#find()
与此正则表达式一起使用,以查找部分匹配