У меня есть этот метод, который я использую для создания массива условного выражения.Проверьте выражение с регулярным выражением
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"
Во всяком случае, чтобы сделать это?
Возможно, у вас проблемы с пробелами. В вашем примере строки - это пробелы, но они не совпадают в регулярном выражении. –
Поскольку вы пытаетесь проверить выражения, вам может быть повезло с помощью парсера вместо регулярных выражений для проверки. Янино - это тот, который вы можете попробовать: http://docs.codehaus.org/display/JANINO/Home, но он может быть переполнен – JNYRanger
@MartijnCourteaux: Спасибо, в этом была проблема. – AR89