2013-10-03 86 views
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" 

反正這樣做呢?

+2

您可能有空間問題。在你的例子中,字符串是空格,但是它們在正則表達式中不匹配。 –

+0

由於您正在嘗試檢查表達式,因此使用解析器代替正則表達式進行驗證可能會更好。 Janino是你可以嘗試的一個:http://docs.codehaus.org/display/JANINO/Home,但它可能是過度殺傷 – JNYRanger

+0

@MartijnCourteaux:謝謝你,那是問題所在。 – AR89

回答

0

您可能有空間問題。在你的例子中,字符串是空格,但是它們在正則表達式中不匹配。