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