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

标签 java regex

形式:column1 = emp_no 提炼: 键:第1列 值:emp_no

第一个代码:

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));    
    }
}

第一个结果:

groupCount: 2
0: column1 = emp_no
1: column1

不可能找到第二个结果。 第二个括号更改为双括号。

第二个代码:

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));    
    }
}

第二个结果:

groupCount: 3
0: column1 = emp_no
1: column1
2: emp_no

我想要输出结果。 第一个和第二个代码中的正则表达式有什么不同?

最佳答案

将您的代码更改为。

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));    
    }
}

第 0 组始终包含整个匹配的字符串。

实际组从索引 1 开始

看看这个 live demo

关于java正则表达式读取属性,双括号有什么不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31874829/

相关文章:

python正则表达式收集具有相同 header 的文件

java - 项目编译需要一个没有在任何地方使用的类

java - 添加外部jar到项目后pom文件出错

当正则表达式的第一个字符是 * 时,Java PatternSyntaxException

java - 用于从文本文件中删除 '-1' 的正则表达式

c# - 正则表达式匹配方括号内括号内的数字和可选文本

java - 线程问题,字段不更新

java - 如何检测 Eclipse 编译错误(Java - JDT)

javascript - 用于从字符串中剥离 URL 的正则表达式

Python用逗号千位分隔符替换中间数字