正则表达式:确定输入字符串是表达式还是公式调用

时间:2018-11-29 11:02:20

标签: regex delphi

我已经在此网站上问了一些有关RegEx Delphi的问题。到目前为止,我得到了很好的帮助。到目前为止,我已经相当成功,但是某些正则表达式存在一些问题。

不管怎么说,

我的问题

用户可以输入一个表达式,例如:

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

在上面的示例中,[x]是一个变量。 [Fib(5)]是使用参数5(常数)的Fib函数的调用。经过一些解析过程;其余的输入字符串为:

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

我希望它是一个表达式(当然,因为在两个公式调用中间有一个运算符)。我通过在主表达式中搜索运算符(在本例中为+),并检查inputstring不是公式(因为在公式调用参数中可以有运算符)来区分表达式。​​

我使用以下正则表达式检查公式:

^\[\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个公式调用,但是包含一个或多个运算符,则该字符串不匹配。

非常感谢!

0 个答案:

没有答案