您当前的位置: 首页 >  c++

phymat.nico

暂无认证

  • 0浏览

    0关注

    1967博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

在C/C++语言中使用正则表达式

phymat.nico 发布时间:2017-12-11 09:40:25 ,浏览量:0

本文所有的内容都来自网络,加上一些个人的理解,不保证正确性,欢迎批评指正   说起 正则表达式(Regular Expression),也许有的朋友天天都在使用,比如grep、vim、sed、awk,只是可能对这个名词不大熟悉。 正则表达式一般简写为regex或者regexp,甚至是RE。关于 正则表达式的介绍,有很多的文章,用搜索引擎查找就可以找到很不错的使用说明。但是在C/C++语言中如何去使用,相应的介绍比较缺乏。大多数C标准库自带regex,可以通过/usr/include/regex.h去看,或者man regex看使用说明。perl,php等语言更是提供了功能强大的 正则表达式,最著名的C语言 正则表达式库为PCRE(Perl Compatible Regular Expression)。本文主要对regex和pcre的使用做一点入门介绍。   1、regex   regex的使用非常简单,只要看一下示例代码1就能明白(示例代码是从“GNU C 规则表达式入门”这篇文章里摘取出来的,是否为原始出处就   不得而知了)。   CODE:#include   #include   #include   #define SUBSLEN 10              /* 匹配子串的数量 */   #define EBUFLEN 128          /* 错误消息buffer长度 */   #define BUFLEN 1024          /* 匹配到的字符串buffer长度 */   int main()   {   size_t       len;   regex_t       re;      /* 存储编译好的 正则表达式, 正则表达式在使用之前要经过编译 */   regmatch_t    subs [SUBSLEN]; /* 存储匹配到的字符串位置 */   char          matched [BUFLEN];     /* 存储匹配到的字符串 */   char          errbuf [EBUFLEN]; /* 存储错误消息 */   int          err, i;   char          src    [] = "111 Hello World 222"; /* 源字符串 */   char          pattern [] = "(.*)"; /* pattern字符串 */   printf("String : %s\n", src);   printf("Pattern: \"%s\"\n", pattern);   /* 编译 正则表达式 */   err = regcomp(&re, pattern, REG_EXTENDED);   if (err) {   len = regerror(err, &re, errbuf, sizeof(errbuf));   printf("error: regcomp: %s\n", errbuf);   return 1;   }   printf("Total has subexpression: %d\n", re.re_nsub);   /* 执行模式匹配 */   err = regexec(&re, src, (size_t) SUBSLEN, subs, 0);   if (err == REG_NOMATCH) { /* 没有匹配成功 */   printf("Sorry, no match ...\n");   regfree(&re);   return 0;   } else if (err) {   /* 其它错误 */   len = regerror(err, &re, errbuf, sizeof(errbuf));   printf("error: regexec: %s\n", errbuf);   return 1;   }   /* 如果不是REG_NOMATCH并且没有其它错误,则模式匹配上 */   printf("\nOK, has matched ...\n\n");   for (i = 0; i
关注
打赏
1659628745
查看更多评论
立即登录/注册

微信扫码登录

0.0490s