You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言正则验证主机名:正则正确却输出‘无匹配’问题

问题原因与解决方法

你的代码问题出在正则表达式编译的标志参数上:

  • POSIX的regcomp函数默认使用**基本正则表达式(BRE)语法,但你写的正则是扩展正则表达式(ERE)**格式,导致匹配逻辑不生效。
  • 原代码缺少编译错误检查和资源释放步骤,无法及时排查潜在问题。

修改后的代码

#include <stdio.h>
#include <regex.h>
#include <stdlib.h>

int main()
{
    char *host = "www.google.es";
    regex_t regex;
    char regularExpresion[] = "^(([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])$";
    int ret;

    // 编译正则时指定使用扩展正则语法
    ret = regcomp(&regex, regularExpresion, REG_EXTENDED);
    if (ret != 0) {
        char errbuf[128];
        regerror(ret, &regex, errbuf, sizeof(errbuf));
        fprintf(stderr, "正则编译错误: %s\n", errbuf);
        return EXIT_FAILURE;
    }

    if(!regexec(&regex, host, 0, NULL, 0))
        printf("Match");
    else
        printf("No match");

    // 释放正则资源,避免内存泄漏
    regfree(&regex);
    return EXIT_SUCCESS;
}

关键修改点

  • 调用regcomp时添加REG_EXTENDED标志,让编译器正确解析你写的扩展正则表达式语法。
  • 增加regcomp返回值检查,能快速定位正则编译阶段的语法错误(比如转义字符误用)。
  • 匹配完成后调用regfree释放regex_t结构体占用的系统资源。

内容的提问来源于stack exchange,提问作者Sergio Dacal Rodríguez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 07:55:21