我正在编写一个程序,用于在 C 中创建套接字,并使用正则表达式来验证命令行参数。我需要匹配的字符串采用以下格式: 192.168.1.1:80/index.html 或者 12.154.85.1/index.html。 我想出了这个正则表达式字符串:
^(\\b(\\d{1,3}\\.){3}\\d{1,3})\\b(\\:(\\d{1,5}))?(\\/[^\\:]*)$
这似乎应该有效。但是,它在我的代码中不匹配。这是相关的代码片段:
char *reg_string = "^(\\b(\\d{1,3}\\.){3}\\d{1,3})\\b(\\:(\\d{1,5}))?(\\/[^\\:]*)$";
regex_t re;
// create regex for matching IP in form (xxx.xxx.xxx.xxx(:80)/index.html)
int re_return = regcomp(&re, reg_string, 0);
// error check regex
if (re_return != 0){
regerror(re_return, &re, buffer, 100);
printf("regcomp() failed with '%s'\n", buffer);
printf("REGEX COMPILATION ISSUE\n");
return 1;
}
我尝试过重新格式化代码,使用 regcomp() 中的 REG_ENHANCED 选项等,但似乎没有任何效果。