标准c/c++不支持正则表达式,但linux下内置正则表达式处理,相对java的Pattern而言,处理比较繁琐。
#include <regex.h> /** *@brief 正则表达式测试 */ void reg_test() { const char *name = "jmA1234kettas"; const char *pattern = "^jm[A-Z][0-9]{1,}(.*)"; regex_t reg; regmatch_t pmatch[5]; int ret = regcomp(®,pattern,REG_EXTENDED); // 编译正则表达式,为reg分配内存 assert(ret==0); ret = regexec(®,name,5,pmatch,0); // 匹配正则表达式 if(ret == 0) { printf("Match\n"); // 提取组信息,i从1开始 for(int i=1;i<5&&pmatch[i].rm_so!=-1;i++) { char buff[200]; memset(buff,'\0',200); int len = pmatch[i].rm_eo - pmatch[i].rm_so; // 匹配长度 strncpy(buff,name+pmatch[i].rm_so,len); printf("buff:%s\n",buff); // 显示kettas } }else if(ret == REG_NOMATCH) { printf("No match\n"); }else { char err[100]; regerror(ret,®,err,100); // 打印错误 printf("error:%s\n",err); } regfree(®); // 释放内存,重复使用regcomp()时,一定要调用regfree(),防止内存漏洞 }
当前Linux(2.6.32)上内置的正则表达式功能比较弱,很多语法不支持,不支持懒惰模式, 位置指定。\d也不支持,只能用[0-9]代替。