gpt4 book ai didi

大字符串上的 C++ 正则表达式

转载 作者:太空宇宙 更新时间:2023-11-04 13:29:04 28 4
gpt4 key购买 nike

我需要检查某个模式是否出现在一个大字符串的开头(比如以千兆字节为单位),我想知道 C++ 标准库正则表达式是否合适。

我尝试在模式的开头使用 regex_search^,并在 .* 尝试使用 regex_match模式结束,但当字符串达到几十兆字节时,两者都会崩溃。

我应该使用一些技巧,还是 C++ 正则表达式不是处理大字符串的正确工具?

对于测试用例,我使用了一个完全由 "aaaaaa..." 组成的字符串和一个由 "^aaa" 组成的正则表达式"aaa.*" 以保持简单。我在 Microsoft C++ 上测试过;无论我最终得到什么解决方案,都必须在 Windows 和 Linux 上运行。

最佳答案

您可以做的一件事是使用迭代器限制搜索范围,例如仅检查前 100 个字符的示例:

int main()
{
std::string s(1024 * 1024 * 1024, 'a');

std::regex e("^aaa");

// limit the range of your search using iterators
if(std::regex_search(s.begin(), s.begin() + 100, e)) // 100 max
{
std::cout << "yes\n";
}

}

显然,您允许的字符数取决于可能匹配的最大大小。

关于大字符串上的 C++ 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32240205/

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