#include <stdio.h>
#include <sys/types.h>
#include <regex.h>
#include <sys/types.h>
#include <regex.h>
#define SUBSLEN 10
#define EBUFLEN 128 /* error buffer length */
#define BUFLEN 1024 /* matched buffer length */
//S > 47 And S < 58 Or S > 64 And S < 91 Or S > 96 And S < 122 Or S = 95 Or S > -20319 And S < -2050
int main (int argc, char **argv)
{
size_t len; /* store error message length */
regex_t re; /* store compilned regular expression */
regmatch_t subs[SUBSLEN]; /* store matched string position */
char matched[BUFLEN]; /* store matched strings */
char errbuf[EBUFLEN]; /* store error message */
int err, i;
char string[] = "_C1__111";
char pattern[] = "\^[A-Za-z0-9][A-Za-z0-9_]{5,15}$";
printf ("String:%s\n", string);
printf ("Pattern:\"%s\"\n", pattern);
/* compile regular expression */
err = regcomp (&re, pattern, REG_EXTENDED);
if (err)
{
len = regerror (err, &re, errbuf, sizeof (errbuf));
fprintf (stderr, "error: regcomp: %s\n", errbuf);
return 1;
}
printf ("Total has subexpression: %d\n", re.re_nsub);
/* execute pattern match */
err = regexec (&re, string, (size_t)SUBSLEN, subs, 0);
if (err == REG_NOMATCH)
{
fprintf (stderr, "Sorry, no match ...\n");
regfree (&re);
return (0);
}
else if (err)
{
len = regerror (err, &re, errbuf, sizeof (errbuf));
fprintf (stderr, "error: regexec: %s\n", errbuf);
return (1);
}
/* if no REG_NOMATCH and no error, then pattern matched */
printf ("\nOK, has matched ...\n\n");
for (i = 0; i <= re.re_nsub; i++)
{
if (i == 0)
{
printf ("begin: %d, end: %d, ",
subs[i].rm_so, subs[i].rm_eo);
}
else
{
printf ("subexpression %d begin: %d, end: %d, ",
i, subs[i].rm_so, subs[i].rm_eo);
}
len = subs[i].rm_eo - subs[i].rm_so;
memcpy (matched, string + subs[i].rm_so, len);
matched[len] = '\0';
printf ("match: %s\n", matched);
}
regfree(&re);
return(0);
}
#define EBUFLEN 128 /* error buffer length */
#define BUFLEN 1024 /* matched buffer length */
//S > 47 And S < 58 Or S > 64 And S < 91 Or S > 96 And S < 122 Or S = 95 Or S > -20319 And S < -2050
int main (int argc, char **argv)
{
size_t len; /* store error message length */
regex_t re; /* store compilned regular expression */
regmatch_t subs[SUBSLEN]; /* store matched string position */
char matched[BUFLEN]; /* store matched strings */
char errbuf[EBUFLEN]; /* store error message */
int err, i;
char string[] = "_C1__111";
char pattern[] = "\^[A-Za-z0-9][A-Za-z0-9_]{5,15}$";
printf ("String:%s\n", string);
printf ("Pattern:\"%s\"\n", pattern);
/* compile regular expression */
err = regcomp (&re, pattern, REG_EXTENDED);
if (err)
{
len = regerror (err, &re, errbuf, sizeof (errbuf));
fprintf (stderr, "error: regcomp: %s\n", errbuf);
return 1;
}
printf ("Total has subexpression: %d\n", re.re_nsub);
/* execute pattern match */
err = regexec (&re, string, (size_t)SUBSLEN, subs, 0);
if (err == REG_NOMATCH)
{
fprintf (stderr, "Sorry, no match ...\n");
regfree (&re);
return (0);
}
else if (err)
{
len = regerror (err, &re, errbuf, sizeof (errbuf));
fprintf (stderr, "error: regexec: %s\n", errbuf);
return (1);
}
/* if no REG_NOMATCH and no error, then pattern matched */
printf ("\nOK, has matched ...\n\n");
for (i = 0; i <= re.re_nsub; i++)
{
if (i == 0)
{
printf ("begin: %d, end: %d, ",
subs[i].rm_so, subs[i].rm_eo);
}
else
{
printf ("subexpression %d begin: %d, end: %d, ",
i, subs[i].rm_so, subs[i].rm_eo);
}
len = subs[i].rm_eo - subs[i].rm_so;
memcpy (matched, string + subs[i].rm_so, len);
matched[len] = '\0';
printf ("match: %s\n", matched);
}
regfree(&re);
return(0);
}
转载于:https://blog.51cto.com/zhoutao/121629