我需要一个正则表达式来匹配组成查询的字符序列。我对查询的定义示例如下:和(cat,dog)在更一般的定义中,它可以表示为 运算符(操作数,操作数) 它由一个包含2个操作数的运算符组成。操作数可以是任何单个ALPHABETIC字(非数字)或甚至是另一个子查询。一个例子是和(山羊,或(斑马,熊))运算符是 AND,OR,NOT ,查询可以越来越多 AMBIGUOUS < / strong>尽可能的程度。查询中没有 WHITESPACE ,我需要在Java应用程序中使用正则表达式。注意: NOT 运算符只能有一个操作数,例如的不(虎)即可。提前谢谢。
答案 0 :(得分:2)
子查询作为操作数使得这不可能。正则表达式对于嵌套的东西来说不够强大,你需要使用无上下文的语法。
答案 1 :(得分:0)
您的问题可能会复杂得多,很难猜测您的确切方向。但是,这个简单的Java示例可能是一个很好的起点:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
String s = "add(1,sub(2,3))";
Pattern p = Pattern.compile("(.*?)\\((.*)\\)");
Matcher m1 = p.matcher(s);
if (m1.matches()) {
System.out.println(m1.group(1));
System.out.println(m1.group(2));
}
System.out.println();
Matcher m2 = p.matcher(m1.group(2));
if (m2.matches()) {
System.out.println(m2.group(1));
System.out.println(m2.group(2));
}
}
}
生成输出,如:
add
1,sub(2,3)
1,sub
2,3