Java Regex组0

有人可以帮我解释下面的代码吗? 谢谢。 我对正则表达式分组有点困惑。

public static String evaluate(String s) { if (s == null) return ""; Matcher m = Pattern.compile("[0-9]*").matcher(s); if (m.find()) { MatchResult mr = m.toMatchResult(); return mr.group(0); } return ""; } 

从文档 :

组零表示整个模式 ,因此表达式m.group(0)等效于m.group()

换句话说, mr.group(0)是整个匹配。

希望这使得组0更加清晰:

例:

  String str = "start123456end"; // Your input String // Group#1 Group#2 // | | Pattern p = Pattern.compile("start([0-9]*)(end)"); // |<--- Group#0 --->| Matcher m = p.matcher(str); // Create a matcher for regex and input while( m.find() ) // As long as your regex matches something { System.out.println("group#0:\t" + m.group()); // Or: m.group(0) System.out.println("group#1:\t" + m.group(1)); System.out.println("group#2:\t" + m.group(2)); } 

输出:

 group#0: start123456end group#1: 123456 group#2: end 

您可以将正则表达式的某些部分“存储”为组。 在我的例子中,你有3个(组在()之间):

  • 第1组: 开始结束字之间的数字。
  • 第2组:仅限结束
  • 第0组:这就是与你的模式相匹配的全部内容 – 组0是保留的,并且将始终返回整个匹配,而所有其他都是可选的并由您定义。

根据你的代码:

例:

 Matcher m = Pattern.compile("[0-9]*").matcher("123456end"); // Matches all numbers if( m.find() ) { System.out.println(m.group(0)); // m.group() possible too } 

只有一组: 0

输出: 123456 (=组0)

现在让我们在模式中添加更多组:

码:

  // Group#1 Group#2 // | | Matcher m = Pattern.compile("([0-9])[0-9]([0-9])*").matcher(str); // Matches all numbers // |<---- Group#0 ---->| if( m.find() ) { System.out.println("group#0:\t" + m.group(0)); // m.group() possible too System.out.println("group#1:\t" + m.group(1)); // 1st digit System.out.println("group#2:\t" + m.group(2)); // 3rd digit } 

现在还有两个小组。

输出:

 group#0: 123456 group#1: 1 group#2: 6 

我建议你这个文档: 课程:正则表达式 。 真的从第一章开始,自己尝试一些例子。

额外:

  • Java Regex教程 (参见3.4。用于分组的分组和反向引用 )
  • Java中正则表达式指南(第1部分)
  • Java中正则表达式指南(第2部分)