#include <stdio.h>
#include <sys/types.h>
#include <regex.h>
int check(const char *buf)
{
int status = 0, i = 0;
int cflags = REG_EXTENDED;
const size_t nmatch = 1;
regmatch_t pmatch[1];
regex_t reg;
const char *pattern1 = "[a-zA-Z]+";
const char *pattern2 = "[0-9]+";
const char *pattern3 = ".{6,12}";
regcomp(®, pattern1, cflags);
status = regexec(®, buf, nmatch, pmatch, 0);
if (status == REG_NOMATCH)
{
regfree(®);
return 1;
}
regcomp(®, pattern2, cflags);
status = regexec(®, buf, nmatch, pmatch, 0);
if (status == REG_NOMATCH)
{
regfree(®);
return 1;
}
regcomp(®, pattern3, cflags);
status = regexec(®, buf, nmatch, pmatch, 0);
if (status == REG_NOMATCH)
{
regfree(®);
return 1;
}
regfree(®);
return 0;
}
int main()
{
char input[256] = {0};
while(scanf("%s", input))
if ( 0 == check(input))
printf("=======\n");
else
printf("No match.\n");
return 0;
#include <sys/types.h>
#include <regex.h>
int check(const char *buf)
{
int status = 0, i = 0;
int cflags = REG_EXTENDED;
const size_t nmatch = 1;
regmatch_t pmatch[1];
regex_t reg;
const char *pattern1 = "[a-zA-Z]+";
const char *pattern2 = "[0-9]+";
const char *pattern3 = ".{6,12}";
regcomp(®, pattern1, cflags);
status = regexec(®, buf, nmatch, pmatch, 0);
if (status == REG_NOMATCH)
{
regfree(®);
return 1;
}
regcomp(®, pattern2, cflags);
status = regexec(®, buf, nmatch, pmatch, 0);
if (status == REG_NOMATCH)
{
regfree(®);
return 1;
}
regcomp(®, pattern3, cflags);
status = regexec(®, buf, nmatch, pmatch, 0);
if (status == REG_NOMATCH)
{
regfree(®);
return 1;
}
regfree(®);
return 0;
}
int main()
{
char input[256] = {0};
while(scanf("%s", input))
if ( 0 == check(input))
printf("=======\n");
else
printf("No match.\n");
return 0;
}
分三次匹配字符串,根据目前掌握的正则的知识就做到这一步了。
晚了,睡了。