读书人

问个蛮灵异的正则表达式有关问题

发布时间: 2012-02-09 18:22:27 作者: rapoo

问个蛮灵异的正则表达式问题
我找到一个匹配不重复的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 += "匹配失败!";} 

读书人网 >.NET

热点推荐