平台之间的C++正则表达式差异



我有以下代码:

#include <string>
#include <regex>
#include <iostream>
int main()
{
std::string s;
s += 'x06';
s += 'x00';
std::regex r(std::string(1, 'x06') + 'x00');
std::smatch sm;
if (std::regex_search(s, sm, r))
{
std::cout << "Successn";
return 0;
}
std::cout << "Failuren";
}

在Windows上;成功;而在Linux上;失败";。我在Windows上使用MSVC 19.28,在Linux上使用GNU 9.3.0。为什么输出不同?

根据C++ECMAScript regex风格引用,

十进制转义符不是反向引用:它是表示nul字符的字符转义符。后面不能跟十进制数字。

因此,要匹配NULL字符,需要使用文本、文本字符和0字符。您可以用一个常规字符串文字定义它为"\0",或者更好地用一个原始字符串文字定义R"()"

下面的印刷品";成功":

#include <string>
#include <regex>
#include <iostream>
int main()
{
std::string s;
s += 'x06';
s += 'x00';
std::regex r(std::string(1, 'x06') + R"()");
std::smatch sm;
if (std::regex_search(s, sm, r))
{
std::cout << "Successn";
return 0;
}
std::cout << "Failuren";
}

最新更新