2014-09-25 2 views

ответ

1

Просто используйте lookbehind и lookahead в своем регулярном выражении.

(?<=\\(cn=)[^()]*(?=\\)) 

DEMO

Объяснение:

  • (?<=\(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 
+0

Пробовал код. Результат = '[(& (objectCategory = group) (| (cn =,) (cn =,) (cn =,) (cn =,) (cn =,) (cn =,) (cn =,) (cn =,) (cn =,) (cn =,)))] ' –

+0

@AshokFelix это работает для меня. –

+0

Yup, отлично работает. Спасибо Авинашу. Можете ли вы объяснить разницу между вашим регулярным выражением и регулярным выражением @ Nicolas '\\ (cn = (. *?) \\)' –

1

Пользователь 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 
+1

Спасибо Николасу, ваш код работает для меня :) –

+0

Хорошо, вы можете позвонить мне Николас и подтвердить ответ ;-) –

Смежные вопросы