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

QNX6.6系统中使用POSIX regex.h正则匹配失败求助

QNX6.6中regex.h正则匹配失败的原因及解决办法

问题核心在于POSIX扩展正则标准不支持\d这个简写字符类:你使用的regex.h是遵循POSIX标准的正则库,在REG_EXTENDED模式下,\d并不是预定义的匹配数字的元字符,它会被当作普通字符d处理。这导致你的正则表达式实际逻辑变成了"匹配以任意数量的d开头,接着一个1-9数字,再任意数量的d的字符串",自然无法匹配全数字的测试串。

解决办法

将正则中的\d替换为POSIX标准的数字匹配方式:

  • 直接使用[0-9]匹配0-9数字
  • 或使用POSIX字符类[[:digit:]](需注意格式)

修改后的正则表达式可以是^[0-9]*[1-9][0-9]*,对应的代码中字符串需改为"^[0-9]*[1-9][0-9]*"。

修改后的测试代码

#include <iostream>
#include <regex.h>
#include <string>

int main() {
  regex_t parse_regex_;
  // 替换为POSIX支持的数字匹配表达式
  std::string match_pattern_ = "^[0-9]*[1-9][0-9]*";
  auto return_errno = regcomp(&parse_regex_, match_pattern_.c_str(),
                              (REG_EXTENDED | REG_NOSUB));

  std::string test_string = "000187149889";
  auto regex_pass = regexec(&parse_regex_, test_string.c_str(), 0, nullptr, 0);

  if (regex_pass != 0) {
    char error_c_str_buffer[100];
    regerror(regex_pass, &parse_regex_, error_c_str_buffer,
             sizeof(error_c_str_buffer));
    std::cerr << "regexec() :" << regex_pass
              << " regerror() :" << error_c_str_buffer << std::endl;
  } else {
    std::cout << "匹配成功" << std::endl;
  }
}

内容的提问来源于stack exchange,提问作者zombieanfuehrer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 12:48:22