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