Проверка полного доменного имени через регулярное выражение - PullRequest
0 голосов
/ 10 января 2020

Мне нужно использовать регулярное выражение, чтобы проверить, соответствует ли имя хоста FQDN или нет. Мой шаблон, как показано ниже:

(\?=^.{1,254}$)(^(\?:(\?!\\d+\\.)[a-zA-Z0-9_\\-]{1,63}\\.\?)+(\?:[a-zA-Z]{1,})$)

Когда я скомпилирую регулярное выражение с этим шаблоном, regcomp() вернет REG_BADRPT. Мой тестовый исходный код, как показано ниже, кто-нибудь может мне помочь? Большое спасибо.

    #include  <stdio.h>
    #include <regex.h> 
    #define FQDN_PATTERN "(\?=^.{1,254}$)(^(\?:(\?!\\d+\\.)[a-zA-Z0-9_\\-]{1,63}\\.\?)+(\?:[a-zA-Z]{1,})$)"
    int main(void)
    {
    printf("Hello, world!\n");
    regex_t regex;
    int reti;
    const char* hostname = "jerry.com.tw";
    reti = regcomp(&regex, FQDN_PATTERN, REG_EXTENDED);
    if (reti) {
       printf( "Could not compile regex: %d\n",reti);
       return 1;
    }
    reti = regexec(&regex, hostname, 0, NULL, 0);
    if (!reti) {
      printf("Match\n");
    }
    else if (reti == REG_NOMATCH) {
      printf("No match\n");
    }
    else {
      printf("Error\n");
      return 1;
    }
    regfree(&regex);
    return 0;
} 
...