[英]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.