棘手的正则表达

时间:2010-10-28 17:52:36

标签: c# regex repeat

我只需要允许0-25个字符长度的字母数字字符(大写字母),并且不允许任何延迟的全重复数值。

我有第一部分:Regex.IsMatch(tmpResult,“^ [0-9A-Z] {0,25} $”); (这很容易)

111112 - 匹配
AABD333434 - 匹配
55555555 - 没有匹配
555 - 不匹配

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:5)

^(?!(.)\1*$)[0-9A-Z]{0,25}$

额外(?!(.)\1*$)将拒绝任何由重复相同字符组成的字符串。

(?!…)否定前瞻,如果匹配,则会导致主正则表达式失败,(.)\1*将匹配重复的字符串字符。

答案 1 :(得分:0)

你可以使用普通方法做到这一点......一旦你将它与你的第一个表达式匹配,只需使用一个子程序迭代每个字符,并在第一次遇到与第一个字符不同的字符时返回true字符串。

只检查大多数字符串的前2个字符后,它应返回true,除非它是无效的字符串。

如果没有更快的话,这应该和正则表达式一样快,如果它实现得好的话。