RegEx: определить, является ли inputtring выражением или вызовом формулы - PullRequest
0 голосов
/ 29 ноября 2018

Я задал несколько вопросов о RegEx Delphi на этом сайте.До сих пор мне очень помогли.До сих пор я был довольно успешным, но у меня есть некоторые проблемы с некоторыми регулярными выражениями.

В любом случае, как говорится;

Моя проблема

Пользователь может ввести выражение, например:

[x]=[Fib(5)]+[Fib(10)];

В приведенном выше примере [x] является переменной.[Fib (5)] - это вызов функции Fib с параметром 5 (постоянная).После некоторых процессов разбора;оставшаяся входная строка:

[Fib(5)]+[Fib(10)]

Я хочу, чтобы это было выражение (конечно, потому что в середине 2 вызовов формулы есть оператор).Я различаю выражение, выполняя поиск операторов в главном выражении (в данном случае: +) и проверяя, что входная строка не является формулой (поскольку в параметрах формулы вызова могут быть операторы).

Я проверяюдля формулы с этим регулярным выражением:

^\[\w+\([a-zA-Z0-9()[\]+\-*\/ANDOR><≠≥≤==]+\)\]$

Это регулярное выражение является моей последней версией в попытке заставить его работать.Я пытаюсь добиться следующего:

[Fib(5)]+[Fib(10)] //Match on Expression, No Match on Formulacall
[Fib(5)] // Match on FormulaCall, No match on Expression

Приведенное выше регулярное выражение для соответствующих вызовов формул в настоящее время соответствует

[Fib(5)]+[Fib(10)]

Мой вопрос

Как я могу убедиться, что мое регулярное выражение для сопоставления вызовов формулы останавливается после завершения вызова и не соответствует полному выражению?Я понимаю, почему оно соответствует всему выражению, но я не могу найти способ остановить его.Если строка не содержит 1 и только 1 вызов формулы, но содержит один или несколько операторов, она не должна совпадать.

Большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...