簡體   English   中英

使用正則表達式驗證字符串

[英]Validating a String using regex

我正在嘗試驗證用戶構建的查詢。

我想要的是什么

  • $xxxx$+87*(50*2)
  • 25*($total$-$absent$)
  • $total$+$present$

等等...

注意: $THESE_ARE_NAME_OF_OPERANDS$

我不想要的

  • $myoperand$+65io
  • ti88+$myoperand$
  • 7kio07 + $operand$

等等...

直到現在我嘗試使用檢測壞組合(即數字和字母組合)

var troublePattern = new Regex(@"\b[0-9]+[a-z|A-Z]"); 
string TroublePattern = troublePattern.ToString();
bool _present = Regex.IsMatch(UserFedData, TroublePattern, RegexOptions.None);

但它並不完全有效。 通過全面工作,我的意思是它在某些時候給出意想不到的結
我如何修改我的正則表達式以實現我的目標?

你的正則表達式應該是

^(\(?\d+\)?|\(?[$][^$]+[$]\)?)([+*/-](\(?\d+\)?|\(?[$][^$]+[$]\)?))*$
 ----------------------------- --------------------------------------
         |                     ------        |->matches 0 to many operands on right                   |
         |                       |
         |                       |->matches operator +,-,*,/
         |->Matches an operand(digit or named variable) on left

我會用邏輯和正則表達式的組合解決這個問題。

有一個方法可以檢查操作數的順序是否正確。 這將是容易更換您的$operand_name$X的驗證方法(字符串替換例如)和簡單地比較針對(所以X+3是確定的和3+X不是)。

然后你可以在有效的內容上使用正則表達式。

否則,我看到Anirudh有一個很好的正則表達式,你可以用它來捕殺,但我不想成為一個維護代碼,也不想嘗試添加新的規則:)

您要做的事情太復雜,無法在單個正則表達式中解決。 您需要構建一個詞法分析器來支持查詢語言的所有組合。

看起來查詢是使用變量的一些算術語法(基本數學運算)。 你應該有一些COTS。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM