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"
反正這樣做呢?
您可能有空間問題。在你的例子中,字符串是空格,但是它們在正則表達式中不匹配。 –
由於您正在嘗試檢查表達式,因此使用解析器代替正則表達式進行驗證可能會更好。 Janino是你可以嘗試的一個:http://docs.codehaus.org/display/JANINO/Home,但它可能是過度殺傷 – JNYRanger
@MartijnCourteaux:謝謝你,那是問題所在。 – AR89