Из приведенной ниже строки, мне нужно получить groupA
, groupB
& groupC
RegEx/Java - Получить значения из строки
String str = "(&(objectCategory=group)(|(cn=groupA) (cn=groupB) (cn=groupC)))"
Как это может быть достигнуто с помощью Java?
Из приведенной ниже строки, мне нужно получить groupA
, groupB
& groupC
RegEx/Java - Получить значения из строки
String str = "(&(objectCategory=group)(|(cn=groupA) (cn=groupB) (cn=groupC)))"
Как это может быть достигнуто с помощью Java?
Просто используйте lookbehind и lookahead в своем регулярном выражении.
(?<=\\(cn=)[^()]*(?=\\))
Объяснение:
(?<=\(cn=)
Утверждает, что символы будут соответствовать должны предшествовать (cn=
[^()]
Соответствует любому символу не из (
или )
ноль или более раз ,(?=\))
Утверждает, что совпавшие символы должны сопровождаться закрывающей скобкой )
Код:
String str = "(&(objectCategory=group)(|(cn=groupA) (cn=groupB) (cn=groupC)))";
Pattern regex = Pattern.compile("(?<=\\(cn=)[^()]*(?=\\))");
Matcher matcher = regex.matcher(str);
while(matcher.find()){
System.out.println(matcher.group(0));
}
Выход:
groupA
groupB
groupC
Пользователь Pattern
и Matcher
. Поиск и поставить в 1-й группе независимо (.*?
) между (cn=
и )
:
Matcher matcher = Pattern.compile("\\(cn=(.*?)\\)").matcher("(&(objectCategory=group)(|(cn=groupA) (cn=groupB) (cn=groupC)))");
while (matcher.find()) {
System.out.println(matcher.group(1));
}
Выход:
groupA
groupB
groupC
Спасибо Николасу, ваш код работает для меня :) –
Хорошо, вы можете позвонить мне Николас и подтвердить ответ ;-) –
Пробовал код. Результат = '[(& (objectCategory = group) (| (cn =,) (cn =,) (cn =,) (cn =,) (cn =,) (cn =,) (cn =,) (cn =,) (cn =,) (cn =,)))] ' –
@AshokFelix это работает для меня. –
Yup, отлично работает. Спасибо Авинашу. Можете ли вы объяснить разницу между вашим регулярным выражением и регулярным выражением @ Nicolas '\\ (cn = (. *?) \\)' –