簡體   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