数字模式(想要匹配一些正则表达式不好解决的有关问题)

数字模式(想要匹配一些正则表达式不好解决的问题)现在想要识别一些模式:在一串数字中1)重复几个数字3333,4

数字模式(想要匹配一些正则表达式不好解决的问题)
现在想要识别一些模式:在一串数字中

1)   重复几个数字   3333,4444,这个简单,扩展的正则表达式可以
2)   连续几个数字   123456,654321
3)   分组重复:ABCABC,   比如123123,   321321
4)   重复连续:AABBCC,   比如112233,223344,112211
5)   重复但不连续:   AABBDD   比如112244   225544
6)   分组重复:   ABAB   比如:181818,232323

这些情况有没有现成的好用的库或算法来解决?因为时间有限,不想自己设计啊。。

[解决办法]
自己设计也很爽!
[解决办法]
放心了,正则写出来也够吓人的了,正则不是万能的。

[解决办法]
这个需求还是自己写程序判断比较快一些
[解决办法]
1、3、5、6可以直接用正则,当然样子是有点吓人的。
2、4自己写也不怎么麻烦。
[解决办法]
查查泛型算法吧,不知道里面有没有相关的
[解决办法]
嗯,这种情况还是自己写快。
用正则,从设计到加测试,最后还不一定对,甚至不一定可行,时间都浪费了。
[解决办法]
恩~~呵呵,什么叫正则啊?
[解决办法]
up
[解决办法]
写得谁快,未为可知,基本上1、3、5、6我写正则快于我自己写算法。但是,需要的测试工作量是相同的。
[解决办法]
1、3、5、6 使用正则完成即可 ~

2 4 自定义 ~
[解决办法]
比如规则2:
int check2(char *str)
{
int i;
for(i=1; i <strlen(str); i++)
if(str[i]!=str[i-1]+1)return 0;
return 1;
}
[解决办法]
#include <stdio.h>
#include <stdlib.h>

int check2(char *str)
{
int i, step;
step = str[1]-str[0]; //记录步长
for(i=2; i <strlen(str); i++)
if(str[i] - str[i-1] != step)return 0; //校验是是符合要求的序列
return 1; //验证通过
}

int check4(char *str)
{
int i=0, count=1, j;
while(str[i]!= '\0 ') //记录重复长度
if(str[i] == str[i+1])count++,i++;
else break;
if(strlen(str) % count != 0)return 0; //总长度和重复长度无法整除,不符合
if(count == 1)return 0; //重复长度为1, 即无重复, 不符合
for(i=count; i <strlen(str); i+=count) //后续部分重复校验
{
for(j=i+1; j <i+count; j++)
if(str[j] != str[i])return 0;
}
return 1; //验证通过
}

int main()
{
char rule2[]= "123456 ",rule4[]= "AABBCC ";

if(check2(rule2))printf( "%s, match rule NO.2!\n ", rule2);
else printf( "%s, mis-match rule NO.2!\n ", rule2);
if(check2(rule4))printf( "%s, match rule NO.2!\n ", rule4);
else printf( "%s, mis-match rule NO.2!\n ", rule4);

if(check4(rule2))printf( "%s, match rule NO.4!\n ", rule2);
else printf( "%s, mis-match rule NO.4!\n ", rule2);
if(check4(rule4))printf( "%s, match rule NO.4!\n ", rule4);
else printf( "%s, mis-match rule NO.4!\n ", rule4);
system( "PAUSE ");
return 0;
}