使用从this page图案,我写此示例代码
String string = "((one = WORD) AND (two != 2) AND (three > 3) AND (four >= 4) AND (five < 5) AND (six <= 6) AND (seven IN (seven1, seven2)) AND (eight LIKE '1,2,3'))";
long start_time = System.currentTimeMillis();
Pattern pattern = Pattern.compile("\\(([^()]*|\\([^()]*\\))*\\)");
Matcher matcher = pattern.matcher(string);
while (matcher.find())
System.out.println(matcher.group());
long stop_time = System.currentTimeMillis();
System.out.println("Time " + (stop_time - start_time) + "ms");
输出是完美的,但是每formance是尴尬,7-8秒
(one = WORD)
(two != 2)
(three > 3)
(four >= 4)
(five < 5)
(six <= 6)
(seven IN (seven1, seven2))
(eight LIKE '1,2,3')
Time 8017ms
编辑:现在解决了这样的
string = string.substring(2, string.length() - 2);
String[] split = string.split("\\) AND \\(");
for (String s : split)
System.out.println(s);
我不靠近我的编译器,所以我不能对此进行测试,但你尝试过使用带有“”AND“参数的字符串split()'方法?这应该返回给你一个字符串数组,如果你想要的话,那么对于每个字符串,你可以修剪它,并删除前导字符和尾随字符(应该是括号) – Kon
如果一个值包含单词“AND”,那么怎么办?像'(一个= LAND)' –
这可能会感兴趣...... https://stackoverflow.com/questions/17759004/how-to-match-string-within-parentheses-nested-in-java – Maxx