正则表达式:序列

时间:2012-02-04 20:23:39

标签: regex vb.net sequence

遇到一个愚蠢的问题。我有一个输入字段,用户可以输入有限数量的字母(ABCDEFG)。问题在于:我不希望用户能够在输入的单个子序列中包含超过3个A,C,E和G的字母,即:无AAA,CCC,EEE,GGG。第二种情况与第一种情况几乎相同:单个子序列中不超过1 B,D,F,即:无BB,DD,FF。这两条规则以某种方式组合在一起。

因此,例如,AABFGECC是有效的。 GEFFFAABG无效。

希望,你会帮助我的!谢谢!

P.S如果它很重要,我正在用Visual Basic编写我的应用程序。但我认为,这不是那么重要。

2 个答案:

答案 0 :(得分:2)

如果您创建的表达式与您要避免的情况相匹配,而是检查输入是否匹配,该怎么办?像这样:

([^A-F]|AAA|CCC|EEE|GGG|BB|DD|FF)

答案 1 :(得分:1)

虽然你可以聪明并使用反向引用,但一个简单的解决方案是使用negative look ahead对无效序列进行黑名单:

^(?!.*(?:AAA|CCC|EEE|GGG|BB|DD|FF))[A-G]*$

逻辑上,在列表中有7个无效序列是一样的,并且检查字符串不包含任何一个,这也为您提供了一个不错的选择。