如何使用RegEx从此行提取子字符串

时间:2018-10-16 16:29:03

标签: java regex

我有以下字符串行: dn: cn=Customer Management,ou=groups,dc=digitalglobe,dc=com

我只想从上面的行中提取此内容:Customer Management

我已经尝试过以下RegEx表达式,但它确实可以满足我的要求:

^dn: cn=(.*?),

这是测试上述表达式的Java代码段:

Pattern pattern = Pattern.compile("^dn: cn=(.*?),");
String mydata = "dn: cn=Delivery Admin,ou=groups,dc=digitalglobe,dc=com";

Matcher matcher = pattern.matcher(mydata);
if(matcher.matches()) {
    System.out.println(matcher.group(1));
} else {
    System.out.println("No match found!");
}

输出为“未找到匹配项” ...:(

3 个答案:

答案 0 :(得分:2)

您的正则表达式应该可以正常工作,但是matches尝试将正则表达式与 entire 字符串匹配。而是使用find方法,该方法将在字符串的任何位置寻找匹配项。

if(matcher.find()) {
    System.out.println(matcher.group(1));
} else {
    System.out.println("No match found!");
}

答案 1 :(得分:0)

您的问题是匹配器要匹配整个输入。尝试在模式末尾添加通配符。

Pattern pattern = Pattern.compile("^dn: cn=(.*?),.*");
String mydata = "dn: cn=Delivery Admin,ou=groups,dc=digitalglobe,dc=com";

Matcher matcher = pattern.matcher(mydata);
if(matcher.matches()) {
    System.out.println(matcher.group(1));
} else {
    System.out.println("No match found!");
}

答案 2 :(得分:0)

请使用以下代码:

@注意:您不必使用匹配项,而必须使用查找

public static void main(String [] args)   {

Pattern pattern = Pattern.compile("^dn: cn=(.*?),");
String mydata = "dn: cn=Delivery Admin,ou=groups,dc=digitalglobe,dc=com";

Matcher matcher = pattern.matcher(mydata);
if(matcher.find()) {
    System.out.println(matcher.group(1));
} else {
    System.out.println("No match found!");
}

}