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