正则表达式分组混淆简单的例子

时间:2014-04-16 09:01:35

标签: java regex

java中的regex新手=)

我希望看到输出:

aaaa
 222212
adasas

我真正看到的是:

aaaa 222212 adasas
aaaa
 222212

代码告诉更多文本,所以这是我的代码:

String sToPars = "aaaa 222212 adasas";

Pattern p = Pattern.compile("(^[A-Za-z]+)( [0-9]+)( [A-Za-z]+)");

Matcher matcher = p.matcher(sToPars);
matcher.find();

for(int i = 0; i < matcher.groupCount();i++){
    System.out.println(matcher.group(i));
}

http://docs.oracle.com/javase/tutorial/essential/regex/groups.html我在这里想念的是什么..

3 个答案:

答案 0 :(得分:4)

matcher对象中,第一组(索引0)是完全匹配。

之后,matcher的索引1组是正则表达式第一个捕获组的结果,索引2是第二个,等等......

要查看您想要的内容,您需要将循环更改为:

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

答案 1 :(得分:0)

group(0)会给你整个字符串。

我修改了for循环。请检查这是否有效

    for(int i = 0; i <= matcher.groupCount();i++){
        System.out.println(matcher.group(i));
    }

基本上组(3)永远不会被你的for循环查询

答案 2 :(得分:0)

Pattern regex = Pattern.compile("^([\\w ]+)$", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE | Pattern.MULTILINE);
    Matcher regexMatcher = regex.matcher(subjectString);
    while (regexMatcher.find()) {
        for (int i = 1; i <= regexMatcher.groupCount(); i++) {
            // matched text: regexMatcher.group(i)
            // match start: regexMatcher.start(i)
            // match end: regexMatcher.end(i)
        }

/*
aaaa
 222212
adasas
*/