C++正则表达式失败(GCC vs Microsoft 编译器)

C++ regex failure (gcc vs microsoft compiler)

本文关键字:Microsoft 编译器 vs GCC 正则表达式 失败 C++      更新时间:2023-10-16

我在项目中有以下正则表达式代码:

// Defintions to make readability easier:
#define BEGIN "\{"
#define END "\}n"
#define VEC2 "\((.+), (.+)\)"
#define VEC3 "\((.+), (.+), (.+)\)"
#define COMMA ", "
....
char input[256];
fgets(buffer, 256, file);
....
std::cmatch result;
std::regex_match(input, result, std::regex("vertex " BEGIN VEC3 COMMA VEC3 COMMA VEC2 END)); // fails

下面是一个示例输入:

vertex {(0.000002, 0.445344, 0.996317), (0.000000, 0.979064, -0.203466), (0.507950, 0.502418)}

从本质上讲,这个正则表达式在 GCC v5.4 上失败(返回 false(,但它在 Microsoft Windows 的官方编译器上完美运行,并且在许多正则表达式测试站点上也有效。我相信这应该有效,但想知道为什么它会失败。

哇,原来这是我的行尾。该文件是由Windows程序写出的,因此该行以rn结尾。对于将来的正则表达式,请检查您的行尾;)