标签墙

正则表达式

Java 正则中的非捕获组

正则表达式中的非捕获组(non-capturing group)用于匹配但不“保存”匹配结果,出现在正则表达式模式中的 (?:pattern) 这部分就是非捕获组。 我试了几个在线的正则表达式测试工具,返回的匹配结果都是“整个组”,不是非捕获组。 Java 中 Matcher#group() 返回的是 group(0),也是整个匹配结果,如果要返回第一个非捕获组,需要用 group(1)。 Pattern pattern = Pattern.compile("([0-9]+)(?:st|nd|rd|th)?"); Matcher matcher = pattern.matcher("1st 2nd 3 4th"); while (matcher.find()) { System.out.printf("%3s %s\n", matcher.group(), matcher.group(1)); } 输出: 1st 1 2nd 2 3 3 4th 4 另外,使用非捕获组时需要注意结尾的 ?,在上面例子中 ([0-9]+)(?:st|nd|rd|th)? 说明该非捕获组是可选的,如....

More...