應用正則表達式判斷IP/MAC/DNS合法性

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;
}

最後
這樣我們就可以隨意的使用正則表達式了,真是太棒了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章