在c语言中用正则表达式实现对email地址和ip地址的验证

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(&reg,pattern,cflags);
	status=regexec(&reg,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(&reg);
	return 0;
}


其中验证email地址的正则表达式为:



表达式可以分为图中所示几部分,下面分别解释:

^:表示匹配的起始位置

\w+:表示字母下划线数字出现一次或多次

([-.]\w+)*  表示-号 .号 字母 数字 下划线 出现零次或多次

*:表示这里可以跟任意个任意字符

.:表示固定的一个"."

$:表示匹配的结束位置


程序执行后的匹配结果:



程序二、IP地址验证:

#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="^((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(&reg,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(&reg);
	return 0;
}

执行结果:


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值