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 に答える