今天在项目里看到用 Python 正则表达式的时候,用到 group,没有仔细看。正好学习 Java 正则表达式,对 group 多留意了一下。java
上代码:正则表达式
import java.util.regex.*; class RegexExample2{ public static void main(String[] args) { String content = " /udisk/123 /udisk/1 /udisk/2"; String pattern = "\\s(/udisk/[1-9]*)"; Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(content); while(m.find()) { System.out.println("Find subString group(0): " + m.group(0)); System.out.println("Find subString group(1): " + m.group(1)); System.out.println("======================="); } } }
打印:学习
Find subString group(0): /udisk/123 Find subString group(1): /udisk/123 ======================= Find subString group(0): /udisk/1 Find subString group(1): /udisk/1 ======================= Find subString group(0): /udisk/2 Find subString group(1): /udisk/2 =======================
这里有两个 group: “空格/udisk/*” 和 “/udisk/*”。肯定两个,是由于我先调用了 groupCount() 来打印有 group 的个数。spa
因此,很明显 group(0) 是整个表达式,而 group(1) 就是咱们用括号括起来的部分。code
某文档写道,捕获组是经过从左至右计算其开括号来编号。例如,在表达式((A)(B(C))),有四个这样的组:blog
因此, group 是正则表达式中捕获组的意思,并非匹配了多少次。匹配屡次,须要继续调用 match.find() 从上一次的位置继续匹配。文档