У меня есть следующая строка String:
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!");
}
Результат: «Совпадений не найдено» ... :(
Вы можете использовать ретроспективный просмотр ((?<=^dn: cn=)[^,]+) или, проще говоря, придерживаться текущего регулярного выражения (или несколько более эффективного ^dn: cn=([^,]+)), но извлекать информацию из его первой группы захвата, однако, возможно, стоит использовать парсер DN.
@Aaron - Я тоже пробовал смотреть за выражением с помощью приведенного выше кода ... он все еще не найден ... ваше выражение отлично работает в regexpal.com, но не в моем глупом java-коде.




Ваше регулярное выражение должно работать правильно, но matches пытается сопоставить регулярное выражение со строкой весь. Вместо этого используйте метод find, который будет искать совпадение в любой точке строки.
if (matcher.find()) {
System.out.println(matcher.group(1));
} else {
System.out.println("No match found!");
}
Ваша проблема в том, что сопоставитель хочет сопоставить вход весь. Попробуйте добавить подстановочный знак в конец шаблона.
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!");
}
Пожалуйста, используйте нижеприведенный код:
@ ПРИМЕЧАНИЕ: вместо использования совпадений вы должны использовать поиск
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!");
}
}
Ваше регулярное выражение должно работать. Каким образом он не делает то, что вы хотите?