我会有组给定的输入,输入的值里面可能是如下这个样子的:
visit=10
kw="jeffrey"
interest="computer,science"现在有一些规则表达式,例如
visit<10 and kw="jeffrey"
visit < 10 and ( kw="jeffrey" or interest="computer")怎样高效的去验证,一组给定的输入是否满足给定的规则表达式?
有没有什么引擎或者好的办法?求给一些思路。

解决方案 »

  1.   

    如果要考虑空格参与的松散模式还有括号嵌套的话情况会比较复杂.如果确实需要可以留言.明天再改进import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class Test{
    //这里暂不考虑空格参与的松散情况.
    //这里暂不考虑嵌套多层括号情况
    public static void main(String[] args){
    String[] contents = new String[5];
    contents[0] = "visit=10";
    contents[1] = "kw=\"jeffrey\"";
    contents[2] = "interest=\"computer,science\"";
    contents[3] = "visit<10 and kw=\"jeffrey\"";
    contents[4] = "visit<10 and (kw=\"jeffrey\" or interest=\"computer\")";
    for(String content : contents){
    process(content);
    }
    } private static void process(String content){
    String  = "([=><]|!=)"; //连接变量名称和变量值的符号可以包括 > < = != 四种判断符号.
    String value = "([\\w,]+|\"[\\w,]+\")";//变量的值包含符号/数字/分号
    String regex_1 = "\\w+" +  + value;//变量的名称只能包含数字和名称 //以上是判断单个变量表达式的情况
     = "( and | or )";//子变量表达式由and或者or连接,这里为and及or前后添加空格.
    String regex_2 = regex_1+"(" +  + regex_1 + ")*";//这个表达式处理不包含括号的情况 //以上是判断不包含括号的情况.
    String regex3 = regex_1 + "(" +  + "(" + regex_2 + "|\\(" + regex_2 + "\\)))*"; Pattern pattern = Pattern.compile(regex3);
    Matcher matcher = pattern.matcher(content);
    if(matcher.matches()){
    System.out.println("\""+content + "\" is valid!");
    return;
    }
    System.out.println("\""+content + "\" isn't valid!");
    }
    }
      

  2.   

    直接用正则表达式验证,去jquery的文档上找,有很多种类型,如果是特殊需求的话,那就把文档上的代码稍微修改一下,符合你的要求,然后把这个表达式保存到笔记中以备后用