摘要:正则表达式是能极大地提高工作效率的工具,使用过Linux下各种具备RE特性的工具的人一定对此深有感触。很多语言都支持RE,用的最多的当然是脚本,其中以perl最盛。不过,用C语言来用RE不是很多见,但是有时候也很有用,我最近也是看到别人说道这个,所以搜了一些资料加上自己的体会来说一说RE在C语言里的应用。C语言本身不具备RE特性,但是有很多库,在Linux下你可以很方便的使用regex.h提供的库。
http://blog.chinaunix.net/uid-479984-id-2114941.html
C语言使用正则表达式
据说一个好的程序员是会使用DB和Regular Expression的程序员,可见两者是多么重要。正则表达式是能极大地提高工作效率的工具,使用过Linux下各种具备RE特性的工具的人一定对此深 有感触。很多语言都支持RE,用的最多的当然是脚本,其中以perl最盛。不过,用C语言来用RE不是很多见,但是有时候也很有用,我最近也是看到别人说 道这个,所以搜了一些资料加上自己的体会来说一说RE在C语言里的应用。C语言本身不具备RE特性,但是有很多库,在Linux下你可以很方便的使用 regex.h提供的库。我先贴一段代码展示一下RE在C语言里是怎么用的
1 #include<stdio.h> 2 #include<sys/types.h> 3 #include<regex.h> 4 #include<memory.h> 5 #include<stdlib.h> 6 7 int main(){ 8 9 char *bematch = "hhhericchd@gmail.com"; 10 char *pattern = "h{3,10}(.*)@.{5}.(.*)"; 11 char errbuf[1024]; 12 char match[100]; 13 regex_t reg; 14 int err,nm = 10; 15 regmatch_t pmatch[nm]; 16 17 if(regcomp(®,pattern,REG_EXTENDED) < 0){ 18 regerror(err,®,errbuf,sizeof(errbuf)); 19 printf("err:%s ",errbuf); 20 } 21 22 err = regexec(®,bematch,nm,pmatch,0); 23 24 if(err == REG_NOMATCH){ 25 printf("no match "); 26 exit(-1); 27 }else if(err){ 28 regerror(err,®,errbuf,sizeof(errbuf)); 29 printf("err:%s ",errbuf); 30 exit(-1); 31 } 32 33 for(int i=0;i<10 && pmatch[i].rm_so!=-1;i++){ 34 int len = pmatch[i].rm_eo-pmatch[i].rm_so; 35 if(len){ 36 memset(match,'
|