- (pattern):非命名捕获
- (?pattern):命名捕获。将匹配的子字符串捕获到一个组名称或编号名称中。用于name的字符串不能包含任何标点符号,并且不能以数字开头。可以使用单引号代替尖括号,例如(?‘name’)
package com.ftn.regexp;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//演示正则表达式语法
public class Regexp_07 {
public static void main(String[] args) {
//非命名捕获
//matcher.group(0):得到匹配到的字符串
//matcher.group(1):得到匹配到的字符串的第一个分组内容
//matcher.group(2):得到匹配到的字符串的第二个分组内容
String content = "fsjj2564123589812..fns()$hjdks nbfsj dj,";
String regStr = "(\\d\\d)(\\d\\d)";
//?<>:命名捕获,可以为分组命名,取值时可以用组名
String regStr2 = "(?<g1>\\d\\d)(?<g2>\\d\\d)";
Pattern pattern = Pattern.compile(regStr2);
Matcher matcher = pattern.matcher(content);
while (matcher.find()){
System.out.println(matcher.group(0));
System.out.println("第一个分组内容:" + matcher.group(1));
System.out.println("第一个分组内容(通过组名):" + matcher.group("g1"));
System.out.println("第二个分组内容:" + matcher.group(2));
System.out.println("第二个分组内容(通过组名):" + matcher.group("g2"));
}
}
}