#регулярные_выражения
Как проверить при помощи регулярок, правильность ввода математического выражения?
Все не как не могу додумать, математическое выражение может включать в себя следующий
набор символов =+-*/()[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)(?!)) )$
Комментариев нет:
Отправить комментарий