找出语句中的变量——正则表达式

[code="js"]
ab123_c == 'xx_123_ABC'|| a==1 && ttt != “aaa\"'\” || xxx >= 1.12345 && abc==true && ddd==false

[/code]

找出这条语句中的所有变量

1个回答

[code="java"]public class Main {

public static void main(String[] args) throws IOException {


    String str = "ab123_c == 'xx_123_ABC'|| a==1 && ttt != \"aaa\"'\" ||  xxx >= 1.12345 && abc==true && ddd==false";

    String variable = "([a-zA-Z_][a-zA-Z0-9_]*)";
    String keyword = "(true|false)";

    Matcher variableMatcher = Pattern.compile(variable).matcher(str);

    while(variableMatcher.find()) {
        String var = variableMatcher.group(1);
        if(Pattern.matches(keyword, var)) {
           continue; 
        }
        int index = str.indexOf(var);
        boolean isConstString = false;
        do {
            if(isConstString(str, str.indexOf(var) - 1)) {
                isConstString = true;
                break;
            }
            index = str.indexOf(var, index+1); 
        } while(index != -1);

        if(isConstString) {
           continue; 
        }

        System.out.println(var);
    }
}

private static boolean isConstString(String str, int index) {
    if(index <= 0) {
        return false;
    }
    char c = str.charAt(index);

    return c == '\'' || c == '\"';
}

}[/code]

这种方式肯定不好,需要使用如ANTLR 进行词法/语法分析。

xpjsky
xpjsky 对对,是我没说清楚,其实是验证一个js表达式,结果必须是boolean值,但是变量和表达式是不确定的,可以任意写,原本考虑用JDK带的JS引擎eval一下,但是变量必须set进去,所以需要解析表达式里面的变量,现在看来,这样子太复杂了
7 年多之前 回复
jinnianshilongnian
jinnianshilongnian 是的 呵呵 而且你的这个没语法 只能靠猜测
7 年多之前 回复
xpjsky
xpjsky 这里有个问题,就是字符串是不确定的,因此字符串可能包含空格,如" abc ",而表达式顺序也可能是反的,如“ abc ” == a, 感觉挺难的
7 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐