我正在尝试使用正则表达式将此字符串拆分为一个电子邮件地址:
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
我不知道为什么第一个示例无效,而第二个示例无效。我想知道为什么。