java正则表达式读取属性,双括号有什么不同

java正则表达式读取属性,双括号有什么不同,java,regex,Java,Regex,表格:第1列=环境管理计划编号 摘录: 关键词:专栏1 价值:emp_编号 第一个代码: String p1 = "column1 = emp_no"; String propertyRegexp = "^\\s*(\\w+)\\s*=\\s*(\\w+)\\s*$"; Pattern pattern = Pattern.compile(propertyRegexp); Matcher matcher = pattern.matcher(p1); System.out.println("gr

表格:第1列=环境管理计划编号 摘录: 关键词:专栏1 价值:emp_编号

第一个代码:

String p1 = "column1 = emp_no";

String propertyRegexp = "^\\s*(\\w+)\\s*=\\s*(\\w+)\\s*$";

Pattern pattern = Pattern.compile(propertyRegexp);
Matcher matcher = pattern.matcher(p1);
System.out.println("groupCount: " + matcher.groupCount());
if(matcher.matches()) {
    for(int i = 0; i < matcher.groupCount(); i++) {
        System.out.println(i + ": " + matcher.group(i));    
    }
}
不可能找到第二个结果。 第二个括号变为双括号

第二个代码:

String p1 = "column1 = emp_no";

String propertyRegexp = "^\\s*(\\w+)\\s*=\\s*((\\w+))\\s*$";

Pattern pattern = Pattern.compile(propertyRegexp);
Matcher matcher = pattern.matcher(p1);
System.out.println("groupCount: " + matcher.groupCount());
if(matcher.matches()) {
    for(int i = 0; i < matcher.groupCount(); i++) {
        System.out.println(i + ": " + matcher.group(i));    
    }
}
我希望结果被输出。 第一个和第二个代码中的正则表达式有什么不同?

将代码更改为

String p1 = "column1 = emp_no";

String propertyRegexp = "^\\s*(\\w+)\\s*=\\s*(\\w+)\\s*$";

Pattern pattern = Pattern.compile(propertyRegexp);
Matcher matcher = pattern.matcher(p1);
System.out.println("groupCount: " + matcher.groupCount());
if(matcher.matches()) {
    for(int i = 1; i <= matcher.groupCount(); i++) {  //see the changes
        System.out.println(i + ": " + matcher.group(i));    
    }
}
String p1=“column1=emp\u no”;
字符串propertyRegexp=“^\\s*(\\w+)\\s*=\\s*(\\w+\\s*$”;
Pattern=Pattern.compile(propertyRegexp);
匹配器匹配器=模式匹配器(p1);
System.out.println(“groupCount:+matcher.groupCount());
if(matcher.matches()){

对于(int i=1;i正则表达式中的组从0索引,但正则表达式引擎自动添加组0以表示整个匹配。您的组被索引为
1
2

所以您的第一次尝试几乎是正确的,您只需从

for(int i = 0; i < matcher.groupCount(); i++) {
for(int i=0;i

for(int i=1;i
String p1 = "column1 = emp_no";

String propertyRegexp = "^\\s*(\\w+)\\s*=\\s*(\\w+)\\s*$";

Pattern pattern = Pattern.compile(propertyRegexp);
Matcher matcher = pattern.matcher(p1);
System.out.println("groupCount: " + matcher.groupCount());
if(matcher.matches()) {
    for(int i = 1; i <= matcher.groupCount(); i++) {  //see the changes
        System.out.println(i + ": " + matcher.group(i));    
    }
}
for(int i = 0; i < matcher.groupCount(); i++) {
for(int i = 1; i <= matcher.groupCount(); i++) {
//          ^     ^