繁体   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