对于使用group(int)而不是find()然后使用group()感到困惑

时间:2018-07-31 08:44:13

标签: java regex

我正在尝试使用正则表达式将此字符串拆分为一个电子邮件地址:

cn=foo,dc=bar,dc=com

这是我到目前为止尝试过的:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {

    public static void main(String[] args) {

        String user = "cn=foo,dc=bar,dc=com";
        Pattern pattern = Pattern.compile("(?<=[cn|dc]=)[^,]+");
        Matcher matcher = pattern.matcher(user);
        matcher.matches();
        System.out.println(matcher.group(1) + "@" + matcher.group(2) + "." + matcher.group(3));
    }
}

这是我在运行该程序时得到的结果:

Exception in thread "main" java.lang.IllegalStateException: No match found
    at java.util.regex.Matcher.group(Matcher.java:536)

我不确定matcher.matches的用处。但是,我尝试使用和不使用这一行,它都会产生相同的结果。

然后我尝试了以下操作:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {

    public static void main(String[] args) {

        String user = "cn=foo,dc=bar,dc=com";
        Pattern pattern = Pattern.compile("(?<=[cn|dc]=)[^,]+");
        Matcher matcher = pattern.matcher(user);
        matcher.find();
        System.out.println(matcher.group());
        matcher.find();
        System.out.println(matcher.group());
        matcher.find();
        System.out.println(matcher.group());
    }
}

它输出所需的结果,又称:

foo
bar
net

我不知道为什么第一个示例无效,而第二个示例无效。我想知道为什么。

0 个答案:

没有答案