需要正则表达式模式来分割字符串

时间:2013-04-30 12:53:55

标签: java regex

如何拆分以下字符串

String str = "(obj.userAge EQUALS  51) AND (obj.userAddress CONTAINS STREET1)";

所以我应该

string 1 = "obj.userAge EQUALS  512";
string 2 = "obj.userAddress CONTAINS STREET1"; 

我试过

str.split("AND") 

但我需要没有括号的字符串

有时我可以从数据库中获取一个字符串,如

String str = "(obj.userAge EQUALS  51) AND (obj.userAddress CONTAINS STREET1) OR (obj2.salary >= 3000)";

所以现在添加了OR

4 个答案:

答案 0 :(得分:3)

试试这个:

public static void main(String[] args) {
    String str = "(obj.userAge EQUALS  51) AND (obj.userAddress CONTAINS STREET1)";
    Pattern pattern = Pattern.compile("\\((.+?)\\)");
    Matcher matcher = pattern.matcher(str);
    while (matcher.find()) {
        System.out.println(matcher.group(1));
    }

}

输出:

 obj.userAge EQUALS  51
 obj.userAddress CONTAINS STREET1

答案 1 :(得分:2)

你应该匹配这个正则表达式

(?<=\\().*?(?=\\))

.匹配单个字符。

*是一个量词,它匹配0到多个前面的字符

.*?懒惰地匹配0到多个字符

(?<=)是一个积极的背后隐藏,检查在当前位置之前的模式。只有当(?<=a)b前面有一个<{1}}时才会匹配b

(?=)是一个积极的前瞻,检查在当前位置之后的模式。所以a(?=b)只有a后跟b才会匹配{{1}} }}

答案 2 :(得分:0)

此正则表达式将为您可以检索的每个括号生成一个组:\((.*)\)\sAND\s\((.*)\)

答案 3 :(得分:0)

还有一个(为了它的乐趣)使用番石榴:

 Iterable<String> result = Splitter.on(Pattern.compile("\\(|\\)|AND")).omitEmptyStrings().trimResults().split(input);