标准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]代替。
本文深入探讨了Linux环境下正则表达式的使用方法,包括编译、匹配及错误处理,对比了与Java的Pattern类的异同,并指出Linux内置功能的限制。
551

被折叠的 条评论
为什么被折叠?



