正则表达式与 - ,::,(和)

ara*_*hak 28 java regex

我需要拆分字符串

(年龄为25 ::或::姓氏,是-QA6):: AND::(年龄为20 ::或:: FIRST_NAME,包含测试)

string [0] =(age-is-25 :: OR :: last_name-is-qa6)

string [1] = AND

string [2] =(age-is-20 :: OR :: first_name-contains-test)

我尝试编写这么多正则表达式,但没有任何方法可以正常工作.

使用以下正则表达式,Matcher.groupCount()返回2但将结果赋给arraylist返回null作为元素.

模式模式= Pattern.compile("(\\)::)?|(:: \\()?");

我尝试使用)::或:: :(拆分它.

我知道正则表达式看起来太愚蠢,但作为初学者,这是我能写的最好的.

dac*_*cwe 35

您可以使用正向前瞻和后瞻来匹配第一个和最后一个括号.

String str = "(age-is-25::OR::last_name-is-qa6)::AND::(age-is-20::OR::first_name-contains-test)";

for (String s : str.split("(?<=\\))::|::(?=\\()"))
    System.out.println(s);
Run Code Online (Sandbox Code Playgroud)

输出:

(age-is-25::OR::last_name-is-qa6)
AND
(age-is-20::OR::first_name-contains-test)
Run Code Online (Sandbox Code Playgroud)

但是请注意:看起来你正在解析某种递归语言.正则表达式不擅长这样做.如果您正在进行高级解析,我建议您查看其他解析方法.

  • 有趣的是,这是第一个没有做出疯狂猜测的回答者.他显然对高级正则表达更熟悉,但他仍在测试.剩下的就像"尝试这个,如果你很幸运,它会工作". (8认同)