首页 > 解决方案 > RegEx:确定输入字符串是表达式还是公式调用

问题描述

我在这个网站上问了一些关于 RegEx Delphi 的问题。到目前为止,我得到了很好的帮助。到目前为止,我已经相当成功,但我在一些正则表达式方面遇到了一些问题。

无论如何,话虽这么说;

我的问题

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

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

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

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

非常感谢!

标签: regexdelphi

解决方案


推荐阅读