C 中的 POSIX 正则表达式不匹配

问题描述 投票:0回答:1

我正在编写一个程序,用于在 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;
    }

这是我的程序的输出: code output

我尝试过重新格式化代码,使用 regcomp() 中的 REG_ENHANCED 选项等,但似乎没有任何效果。

c regex posix
1个回答
0
投票

您使用的语法不受 POSIX 正则表达式支持。参见例如这篇文章,了解可供

regcomp
和朋友使用的语法的描述,或者考虑链接到 pcre 库 或提供更多增强语法的类似包。

© www.soinside.com 2019 - 2024. All rights reserved.