Chinaunix首页 | 论坛 | 博客
  • 博客访问: 417339
  • 博文数量: 54
  • 博客积分: 1186
  • 博客等级: 少尉
  • 技术积分: 668
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-11 04:57
文章分类

全部博文(54)

文章存档

2013年(1)

2012年(6)

2011年(47)

我的朋友

分类: C/C++

2011-05-06 06:15:29

引自: http://blog.csdn.net/sahusoft/archive/2009/05/18/4196342.aspx
#include
  2 #include
  3 #include
  4
  5 #define SUBSLEN 10              /* 匹配子串的数量 */
  6 #define EBUFLEN 128             /* 错误消息buffer长度 */
  7 #define BUFLEN 1024             /* 匹配到的字符串buffer长度 */
  8
  9 int main()
 10 {
 11     size_t len;
 12     regex_t re;/* 存储编译好的正则表达式,正则表达式在使用之前要经过编译 */
 13     regmatch_t subs [SUBSLEN];/* 存储匹配到的字符串位置 */
 14     char matched [BUFLEN]; /* 存储匹配到的字符串 */
 15     char errbuf [EBUFLEN]; /* 存储错误消息 */
 16     int err, i;
 17
 18     char src[] = "111 这是由Linux C 匹配出来的内容 222"; /* 源字符串 */
 19     char pattern [] = "(.*)"; /* pattern字符串 */
 20
 21     printf("String : %s\n", src);
 22     printf("Pattern: \"%s\"\n", pattern);
 23
 24     /* 编译正则表达式 */
 25     err = regcomp(&re, pattern, REG_EXTENDED);
 26
 27     if (err)
 28     {
 29         len = regerror(err, &re, errbuf, sizeof(errbuf));
 30         printf("error: regcomp: %s\n", errbuf);
 31         return 1;
 32     }
 33     printf("Total has subexpression: %d\n", re.re_nsub);
 34     /* 执行模式匹配 */
 35     err = regexec(&re, src, (size_t) SUBSLEN, subs, 0);
 36     if (err == REG_NOMATCH)
 37     {   /* 没有匹配成功 */
 38         printf("Sorry, no match ...\n");
 39         regfree(&re);
 40         return 0;
 41     }
 42     else if (err)
 43     {
 44         /* 其它错误 */
 45         len = regerror(err, &re, errbuf, sizeof(errbuf));
 46         printf("error: regexec: %s\n", errbuf);
 47         return 1;
 48     }
 49
 50     /* 如果不是REG_NOMATCH并且没有其它错误,则模式匹配上 */
 51     printf("\nOK, has matched ...\n\n");
 52     for (i = 0; i <= re.re_nsub; i++)
 53     {
 54         len = subs[i].rm_eo - subs[i].rm_so;
 55         if (i == 0)
 56         {
 57             printf ("begin: %d, len = %d  ", subs[i].rm_so, len); /* 注释1 */
 58         }
 59         else
 60         {
 61             printf("subexpression %d begin: %d, len = %d  ", i, subs[i].rm_so, len);
 62         }
 63         memcpy (matched, src + subs[i].rm_so, len);
 64         matched[len] = '\0';
 65         printf("match: %s\n", matched);
 66     }
 67
 68     regfree(&re); /* 用完了别忘了释放 */
 69     return (0);
 70 }
阅读(1477) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~