2013-07-25 68 views
2

我我的表情正则表达式匹配复杂的表达式

A > 16 
A <= 16 and A >= 1 
A < 40 or A > -40 
A != 19 and A > 50 and A != 8 
A > 1 or A < 2 

的下面的例子我可以在一个单一的正则表达式做了这样的评价?

basicly

  1. 只允许以下sympols > < = ! - != >= <=
  2. 有有前and/or运营商是空间和A 后只有当它不是第一个字母。
  3. 我的变量始终是恒定的,在这种情况下是A

谷歌并没有帮助这个时候,我真正的新的正则表达式中,如何才达到这样的事情将是很好的指导

回答

2

像这样的东西应该工作:

^A ([<>!]=?|=) -?\d+((and|or) A ([<>!]=?|=) -?\d+)*$ 

它允许地方A相比使用comparitors <的一个部分正或负整数表达式,>!<=>=!=,其次是海湾任意数量的其他类似表述的,由andor —分开你上市!!=作为单独的符号,所以我一直都允许作为比较,也就是我的解决方案实际上允许表达式如A ! 2。如果这不合乎要求,则用上述模式替换([<>!]=?|=)([<>]=?|!?=)

你可以测试一下here

这里有一个略微简化的版本,你可以尝试,以及:

^(A ([<>!]=?|=) -?\d+((and|or) |$))+$ 
+0

我希望我可以给你+10,谢谢它的完美。 – user1590636

+0

@ user1590636很高兴提供帮助。快乐的编码。 –