Я задал несколько вопросов о 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 вызов формулы, но содержит один или несколько операторов, она не должна совпадать.
Большое спасибо!