gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 20:40:26 24 4
gpt4 key购买 nike

我有以下代码:

#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 << "Success\n";
return 0;
}

std::cout << "Failure\n";
}
在 Windows 上,我得到“成功”,而在 Linux 上,我得到“失败”。我在 Windows 上使用 MSVC 19.28,在 Linux 上使用 GNU 9.3.0。为什么输出不同?

最佳答案

根据C++ ECMAScript regex flavor reference ,

The decimal escape \0 is NOT a backreference: it is a character escape that represents the nul character. It cannot be followed by a decimal digit.


因此,要匹配 NULL 字符,您需要使用 \0文字文字,文字 \字符和 0字符。您可以使用常规字符串文字将其定义为 "\\0"或者 - 更好 - 使用原始字符串文字, R"(\0)" .
以下 prints “成功”:
#include <string>
#include <regex>
#include <iostream>

int main()
{
std::string s;
s += '\x06';
s += '\x00';
std::regex r(std::string(1, '\x06') + R"(\0)");
std::smatch sm;
if (std::regex_search(s, sm, r))
{
std::cout << "Success\n";
return 0;
}

std::cout << "Failure\n";
}

关于平台之间的 C++ 正则表达式差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67283909/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com