Страницы

Поиск по вопросам

пятница, 28 февраля 2020 г.

Регулярное выражение математического выражения

#регулярные_выражения


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

Комментариев нет:

Отправить комментарий