正则表达式匹配字符序列

时间:2011-04-07 05:28:23

标签: java regex

我需要一个正则表达式来匹配组成查询的字符序列。我对查询的定义示例如下:和(cat,dog)在更一般的定义中,它可以表示为 运算符(操作数,操作数) 它由一个包含2个操作数的运算符组成。操作数可以是任何单个ALPHABETIC字(非数字)或甚至是另一个子查询。一个例子是和(山羊,或(斑马,熊))运算符是 AND,OR,NOT ,查询可以越来越多 AMBIGUOUS < / strong>尽可能的程度。查询中没有 WHITESPACE ,我需要在Java应用程序中使用正则表达式。注意: NOT 运算符只能有一个操作数,例如的不(虎)即可。提前谢谢。

2 个答案:

答案 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