C语言处理正则表达式常用的函数有regcomp()、regexec()、regfree()和regerror(),
C语言中使用正则表达式一般分为三步:
编译正则表达式 regcomp()
匹配正则表达式 regexec()
释放正则表达式 regfree()
本篇文章主要是通过regcomp()、regexec()、regerror()、regfree()函数在c中的应用,复习正则表达式的用法。
程序一、email地址验证:
#include <stdio.h> #include <sys/types.h> #include <regex.h> int main(int argc,char * argv) { int status,i; int cflags=REG_EXTENDED; regmatch_t pmatch[1]; const size_t nmatch=1; regex_t reg; const char *pattern="^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*.\\w+([-.]\\w+)*$"; char *buf="sdlcwangsong@sina.cn"; regcomp(®,pattern,cflags); status=regexec(®,buf,nmatch,pmatch,0); if(status==REG_NOMATCH) printf("No Match\n"); else if(status==0){ printf("Match:\n"); for(i=pmatch[0].rm_so;i<pmatch[0].rm_eo;i++) putchar(buf[i]); printf("\n"); } regfree(®); return 0; }
其中验证email地址的正则表达式为:
表达式可以分为图中所示几部分,下面分别解释:
^:表示匹配的起始位置
\w+:表示字母下划线数字出现一次或多次
([-.]\w+)* 表示-号 .号 字母 数字 下划线 出现零次或多次
*:表示这里可以跟任意个任意字符
.:表示固定的一个"."
$:表示匹配的结束位置
程序执行后的匹配结果:
程序二、IP地址验证:
#include <stdio.h> #include <sys/types.h> #include <regex.h> int main(int argc,i; int cflags=REG_EXTENDED; regmatch_t pmatch[1]; const size_t nmatch=1; regex_t reg; const char *pattern="^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]).){3}(25[0-5]|2[0-5][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$"; // const char *pattern="^((25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d).){3}(25[0-5]|2[0-5]\\d|[01]?\\d?\\d)$"; char *buf="192.68.16.39"; regcomp(®,cflags); status=regexec(®,0); if(status==REG_NOMATCH) printf("No Match\n"); else if(status==0){ printf("Match:\n"); for(i=pmatch[0].rm_so;i<pmatch[0].rm_eo;i++) putchar(buf[i]); printf("\n"); } regfree(®); return 0; }
执行结果:
原文链接:https://www.f2er.com/regex/362476.html