[英]Regular expression to validate a mathematical formula
我需要使用正则表达式验证字符串以确认它是否遵循有效格式。 字符串可以包含数字、运算符、空格、点、左括号、右括号、逗号、这些聚合函数 SUM、MAX、MIN、AVG 和以字母 V 开头的变量。
我发现这个正则表达式 ^[0-9+ -/()., ]+$ 这检查 0-9 (数字); '+'; '-'; ' '; '/'; '('; ')'; '.'; ','; ' '(空间)。 但我无法在其中包含聚合函数和字母 V。
一些有效的输入字符串是
AVG(SUM(1, 2, 3), SUM(4, 5, 6)) * 100
SUM(V1/2,(2+7),3)+(V1+V2)
有人可以帮我解决这个问题。
从对该问题的评论中:
您是否尝试确保字符串中仅出现有效字符、聚合函数和变量名,或者您是否还尝试检查字符串的格式是否正确(即运算符的任一侧都有一个操作数,括号匹配, ETC...)?
- DM
@DMI 只是试图仅验证有效字符
- DevMJ
由于您只是想检查一个公式是否包含数字、函数、变量等(而不是它是否也可以执行),因此您可以在一组中添加可能性作为替代方案。
一种可能性是模式^(?:\d|\+|\-|\/|\*|\(|\)|\.|\,|AVG|SUM|MAX|MIN|V\d+| )*$
与您提供的样本相匹配。
解释:
令牌 | 火柴 |
---|---|
^ |
一行的开始 |
(?: |
非捕获组备选方案的开始 |
\d |
一个数字(相当于[0-9] ) |
\+ |
+ 字符 |
\- |
- 字符 |
\/ |
/ 字符 |
\* |
* 字符 |
\( |
( 字符 |
\) |
) 字符 |
\. |
. 特点 |
\, |
, 字符 |
AVG |
字符串AVG |
SUM |
字符串SUM |
MAX |
字符串MAX |
MIN |
字符串MIN |
V\d+ |
V 字符后跟一个或多个数字 |
|
空间 |
) |
非捕获组的结束 |
* |
任何替代方案零次或多次 |
$ |
一行结束 |
正如评论中提到的,如果您还想检查字符串是否可以成功执行,您需要考虑为您的“语言”定义一个上下文无关的语法,并使用像ANTLR这样的工具来使用语法解析字符串。
由于您只关心有效字符,因此这确实是正则表达式的工作。
一种简单的过滤方法就是在有效字符中添加字母:
^[A-Z0-9+-/()., ]+$
如果您还想允许小写字符,您甚至可以添加az
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.