error_stack during regex_match

error_stack during regex_match

本文关键字:match regex stack error during      更新时间:2023-10-16

目标是: 这个 json:

{"secretWord1":"private", "something": ""secretWord2":"privateToo""}

通过regex_match转换为此内容:

{"secretWord1":"****", "something": ""secretWord2":"****""}

我有以下代码,其中包含三个正则表达式:

std::regex regex1(R"~((\"|")((?:[^\"]*)(?:secretWord1|secretWord2))1:1([^\"]*)1)~", std::regex_constants::icase);
std::regex regex2(R"~((\")((?:[^\"]*)(?:secretWord1|secretWord2))1:1([^\"]*)1)~", std::regex_constants::icase);
std::regex regex3(R"~((")((?:[^\"]*)(?:secretWord1|secretWord2))1:1([^\"]*)1)~", std::regex_constants::icase);
std::string replaced = someJsonData;
replaced = std::regex_replace(replaced, regex1, "$1$2$1:$1****$1");
replaced = std::regex_replace(std::regex_replace(replaced, regex2, "$1$2$1:$1****$1"), regex3, "$1$2$1:$1****$1");

我想替换秘密信息并将其隐藏在星星后面。第一个正则表达式在

error_stack: regex_error(error_stack): There was insufficient memory to determine whether the regular expression could match the specified character sequence.

第一个表达式有问题吗?因为其他两个表达式只是相互补充,最终,它像 regex1 一样做同样的工作,但当我运行它们时它们运行得很好。

在失败期间我无法弹出示例代码,但文件不是那么大(大约 30kB(。当我尝试使用 JSON 生成器时,正则表达式 1 显然比我组合正则表达式 2+正则表达式 3 时慢。

我对c ++和内存问题了解不多,但这似乎很匹配:

(\?"(secretword1|secretword2)\?":\?")(.*?)(\?")

https://regex101.com/r/T8pY0V/2


请注意,我强烈建议获取一个 JSON 库,但这个正则表达式可以在紧要关头工作。由您来找出它失败的所有边缘情况。