RegEx / Java - 从String中检索值

时间:2014-09-25 08:49:15

标签: java regex

从下面的字符串中,我需要检索groupAgroupB& groupC

String str = "(&(objectCategory=group)(|(cn=groupA) (cn=groupB) (cn=groupC) ))"

如何使用Java实现这一目标?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

用户PatternMatcher。在.*?(cn=之间搜索并输入第1组()):

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

答案 2 :(得分:1)

cn=([^)]*)

试试这个。抓住捕获。参见演示。

http://regex101.com/r/qC9cH4/10