2013-10-03 2 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

Поскольку вы пытаетесь проверить выражения, вам может быть повезло с помощью парсера вместо регулярных выражений для проверки. Янино - это тот, который вы можете попробовать: http://docs.codehaus.org/display/JANINO/Home, но он может быть переполнен – JNYRanger

+0

@MartijnCourteaux: Спасибо, в этом была проблема. – AR89

ответ

0

Возможно, у вас проблемы с пробелами. В вашем примере строки - это пробелы, но они не совпадают в регулярном выражении.

Смежные вопросы