繁体   English   中英

用于验证数学公式的正则表达式

[英]Regular expression to validate a mathematical formula

我需要使用正则表达式验证字符串以确认它是否遵循有效格式。 字符串可以包含数字、运算符、空格、点、左括号、右括号、逗号、这些聚合函数 SUM、MAX、MIN、AVG 和以字母 V 开头的变量。

我发现这个正则表达式 ^[0-9+ -/()., ]+$ 这检查 0-9 (数字); '+'; '-'; ' '; '/'; '('; ')'; '.'; ','; ' '(空间)。 但我无法在其中包含聚合函数和字母 V。

一些有效的输入字符串是

  1. AVG(SUM(1, 2, 3), SUM(4, 5, 6)) * 100
  2. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM