如何拆分以下字符串
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
。
答案 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
1} p>
(?=)
是一个积极的前瞻,检查在当前位置之后的模式。所以a(?=b)
只有a
后跟b
才会匹配{{1}} }}
答案 2 :(得分:0)
此正则表达式将为您可以检索的每个括号生成一个组:\((.*)\)\sAND\s\((.*)\)
答案 3 :(得分:0)
还有一个(为了它的乐趣)使用番石榴:
Iterable<String> result = Splitter.on(Pattern.compile("\\(|\\)|AND")).omitEmptyStrings().trimResults().split(input);