应用正则表达式判断IP/MAC/DNS合法性
发布时间:2020-12-14 00:42:48 所属栏目:百科 来源:网络整理
导读:C中使用正则表达式 在C语言中使用正则表达式也是件很简单的事,但真正会用的人好像很少啊真是遗憾。其实应用正则表达式判断一些格式的合法性非常方便。下面就举几个例子先睹为快。 本文例子都经过测试可放心使用。 正则表达式封装 我们不必关心正则引擎的打
C中使用正则表达式 在C语言中使用正则表达式也是件很简单的事,但真正会用的人好像很少啊真是遗憾。其实应用正则表达式判断一些格式的合法性非常方便。下面就举几个例子先睹为快。 本文例子都经过测试可放心使用。
正则表达式封装 我们不必关心正则引擎的打开关闭等,因此把相关操作封装到一个函数中,实现如下: 注:使用正则表达式时需要包含头文件(#include<regex.h>) /** * 判断字符串是否满足正则表达式 * regex_pattern: 正则表达式 * to_match: 待匹配正则表达式的字符串 * 返回值: -1 不匹配 * 0 匹配 */ int regex_exe(const char *regex_pattern,const char *to_match) { regex_t r; int ret; int match; char errmsg[128]; if(regcomp(&r,regex_pattern,REG_EXTENDED | REG_NEWLINE)) { printf("regcomp failed!n"); regfree(&r); return -1; } ret = regexec(&r,to_match,NULL,0); if(!ret) { match = 1; printf("match!n"); } else if(ret == REG_NOMATCH) { match = 0; printf("not match!n"); } else { regerror(ret,&r,errmsg,sizeof(errmsg)); printf("regexec failed: %s!n",errmsg); regfree(&r); return -1; } regfree(&r); return match; }有了这个函数,我们就可以根据学过的正则表达式知识,完成IP/MAC/DNS等的校验了。
IP地址校验 int check_ip(const char *ip) { int match; const char validIpAddress[] = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"; match = regex_exe(validIpAddress,ip); if(match != 1) { return -1; } return 0; }
int check_mac(const char *mac) { int match; const char validMacAddress[] = "^([a-fA-F0-9]{2}:){5}([a-fA-F0-9]{2})$"; printf("%sn",mac); match = regex_exe(validMacAddress,mac); if(match != 1) { return -1; } return 0; }
DNS域名校验
int check_dns(const char *dns) { int match; const char validDnsRegex[] = "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]).)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])$"; printf("%sn",dns); match = regex_exe(validDnsRegex,dns); if(match != 1) { return -1; } return 0; } 最后
这样我们就可以随意的使用正则表达式了,真是太棒了。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |