问个蛮灵异的正则表达式问题
我找到一个匹配不重复的N位数字的正则
(?!.*?(.).*?\1)[0-9]{N}
(?!.*?(.).*?\1)[0-9]{7}这个就是匹配10位不重复数字的,"0123456"可以匹配,但是"0113456"就不会匹配,这个没问题,OK
现在我有个要求是这样的,
1<space>XXXX<space>XXXX<space>XXXX<space>XXXX<space>XXXX<space>XXXX<space>XXXX
XXXX为1-10位不重复的数字,那么我将上面的东西整合进来
一开始写成这样的正则
Regex reg=new Regex(@"^1\s(((?!.*?(.).*?\1)[0-9]{1,10})\s){6}(?!.*?(.).*?\1)[0-9]{1,10}$");
发现居然不对?然后我将6位降低到4位,居然对了,能成功的匹配
string x = "1 12 13 13 24 12";
但是当变成5的时候,string x = "1 12 13 13 24 12 15";就不能匹配了。1-4都能匹配,4以上的就匹配不了了,怎么会这样子的?
------解决方案--------------------
貌似酱紫可以:
^1(?:\s(?:(\d)(?![^\s]*\1)){1,10}){7}$
------解决方案--------------------开始考虑复杂了,楼上的可以简化为
C# code
string x = "1 12 13 13 24 12 15";
Regex reg = new Regex(@"^1(?:\s(?:(\d)(?!\S*\1)){1,10}){6}$");
if (reg.IsMatch(x))
{
richTextBox2.Text += "匹配成功!";
}
else
{
richTextBox2.Text += "匹配失败!";
}