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
相关产品推荐
相关产品推荐

