Мне нужно использовать регулярное выражение, чтобы проверить, соответствует ли имя хоста 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(®ex, FQDN_PATTERN, REG_EXTENDED);
if (reti) {
printf( "Could not compile regex: %d\n",reti);
return 1;
}
reti = regexec(®ex, 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(®ex);
return 0;
}