您的位置:首页 > 编程语言 > C语言/C++

应用正则表达式判断IP/MAC/DNS合法性

2017-01-24 10:08 465 查看
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, 0, 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;
}


MAC地址校验
int check_mac(const char *mac)
{
int match;
const char validMacAddress[] = "^([a-fA-F0-9]{2}:){5}([a-fA-F0-9]{2})$";

printf("%s\n", 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("%s\n", dns);
match = regex_exe(validDnsRegex, dns);
if(match != 1) {
return -1;
}

return 0;
}

最后
这样我们就可以随意的使用正则表达式了,真是太棒了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 正则 IP MAC DNS