当前位置:

C语言正则表达式展示

访客 2024-01-05 589 0

正则表达式用于从字符串缓存区里搜索是否有满足条件的字符段落(可以无、有1个,多个等等情况)。
java/python/c都有开发接口。

基本套路都是:
[1]正则模式编译:
后面匹配时可以直接使用,加快效率;

intregcomp(regex_t*compiled,constchar*pattern,intcflags);

【2】匹配:

intregexec(regex_t*compiled,char*string,size_tnmatch,regmatch_tmatchptr[],inteflags)

注意:如果要看是否输入的string完整匹配正则,需要看matchptr内的字符区间是否涵盖了整个字符串长度。

【3】使用完毕释放:

voidregfree(regex_t*compiled)

【4】错误信息查询:

size_tregerror(interrcode,regex_t*compiled,char*buffer,size_tlength)

简单示例:在这里插入代码片

#include<stdio.h>#include<sys/types.h>#include<regex.h>#include<string.h>voidprint_match(regmatch_t*pmatch,char*buf){inti;for(i=pmatch->rm_so;i<pmatch->rm_eo;i){putchar(buf[i]);}putchar('\n');}intreg_match(regex_t*pattern,char*buf){regmatch_tpmatch[1];constsize_tnmatch=1;//执行正则表达式和缓存的比较intstatus=regexec(pattern,buf,nmatch,pmatch,0);if(status==REG_NOMATCH)printf("Nomatch!\n");elseif(0==status){intlength=pmatch[0].rm_eo-pmatch[0].rm_so;if(length==strlen(buf)){printf("%s完全匹配成功!==>",buf);}else{printf("%s部分匹配成功***>",buf);}//打印匹配的字符串print_match(&pmatch[0],buf);}returnstatus;}intmain(){regex_tregFileName;//编译正则模式intrc=regcomp(&regFileName,"[0-9A-Za-z_\\.-]",REG_EXTENDED);if(0==rc){reg_match(&regFileName,"abc.name");reg_match(&regFileName,"ab11c.name");reg_match(&regFileName,"abc22.name");reg_match(&regFileName,"abc.33");reg_match(&regFileName,"abc.--33");reg_match(&regFileName,"abc.-33.aa.c");reg_match(&regFileName,"abc.,-33.aa.c");reg_match(&regFileName,"abc--__.33");reg_match(&regFileName,"abc-@__.33");reg_match(&regFileName,"abc-#__.33");reg_match(&regFileName,"abc-343~__.33");regfree(&regFileName);}else{printf("regcompilederrror\n");charerrBuf[1024];regerror(rc,&regFileName,errBuf,1024);printf("regerror:%s\n",errBuf);}return0;}

发表评论

  • 评论列表
还没有人评论,快来抢沙发吧~