#регулярные_выражения
Как проверить при помощи регулярок, правильность ввода математического выражения? Все не как не могу додумать, математическое выражение может включать в себя следующий набор символов =+-*/()[a-z]. То есть это список корректных выражений: x=x+1 (x+1)=sav*10/(2+1) a+b=c (r+w)/2 a=3+5/(3*10(-10/4)) +a--3+50 А это список некорректных: =2+r ((d+f) *e=f g=/3 3=4//5 x=5/ df= Т.е. по идее нужно рекурсивно раскрыть скобки, и проверить последовательность определенных символов.
Ответы
Ответ 1
Окей, вопрос решился, оставлю регулярку для потомков: ( ( ( (?<=^|\(|\=|\+|\-|\*|\/) ([a-zA-Z][a-zA-Z\d]*) (?=$|\)|\=|\+|\-|\*|\/) ) | ( (?<=^|\(|\=|\+|\-|\*|\/) (\d+) (?=$|\)|\+|\-|\*|\/) ) | ( (?<=[a-zA-Z\d]) (\=) (?=[a-zA-Z\d]|\(|\+|\-) ) | ( (?<=^|[a-zA-Z\d]|\=|\(|\)) (\+|\-) (?=[a-zA-Z\d]|\() ) | ( (?<=[a-zA-Z\d]|\)) (\*|\/) (?=[a-zA-Z\d]|\() ) | (?(?<=^|\=|\(|\+|\-|\*|\/) (\() (?=[a-zA-Z\d]|\(|\+|\-) ) | (?<-level> (?<=[a-zA-Z\d]|\)) (\)) (?=$|\)|\+|\-|\*|\/) ) )+ (?(level)(?!)) )$
Комментариев нет:
Отправить комментарий