0

我有这个方法,我用它来创建一个条件表达式的数组。

private void convertToList() {
    String regex = "[-]?[0-9]+([eE][-]?[0-9]+)?|([-+/*\\\\^])|([()])|(!)|(>=)|(<=)|(<)|(>)|(&&)|(==)|(!=)|([|][|])|(\\[)|(\\])|(and)|(or)|(not)|(true)|(false)|([A-Za-z_][A-Za-z_0-9]*)";
    Matcher m3 = Pattern.compile(regex).matcher(this.stringExp);
    this.arrayExp = new ArrayList<String>(this.stringExp.length());
    while (m3.find()) {
        arrayExp.add(m3.group());
    }
}

表达式可以包含单词、数字和运算符(您可以在正则表达式中看到)。

现在我想在标记化之前检查表达式是否有效。我试过这个,但它不起作用。

private static void checkString(String s){
    String regex = "[-]?[0-9]+([eE][-]?[0-9]+)?|([-+/*\\\\^])|([()])|(!)|(>=)|(<=)|(<)|(>)|(&&)|(==)|(!=)|([|][|])|(\\[)|(\\])|(and)|(or)|(not)|(true)|(false)|([A-Za-z_][A-Za-z_0-9]*)";
    Matcher m3 = Pattern.compile(regex).matcher(s);
    if (m3.matches()){
        System.out.println("OK");
    } else {
        System.out.println("Not ok");
    }
}

有效字符串示例:

"a + b < 5"
"a <= b && c > 1 || a == 4"

无论如何要这样做?

4

1 回答 1

0

您可能遇到了空格问题。在您的示例中,字符串是空格,但它们在正则表达式中不匹配。

于 2013-10-06T18:00:17.690 回答