C++在0的字符数组上使用正则表达式并得到结果

C++在0的字符数组上使用正则表达式并得到结果,c++,regex,C++,Regex,我想在包含0字节的二进制文件上使用正则表达式,这使我无法使用字符串。我使用了一个字符数组,并且我能够在字符数组上使用正则表达式 Buffer是映射到内存中的文件的副本,read是总大小。这段代码可以工作,但现在我想从函数中得到结果。我该怎么做 if(std::regex_search(buffer, buffer + read, *params->pattern)) { std::cout << "Found."; } 我没有测试这个,

我想在包含0字节的二进制文件上使用正则表达式,这使我无法使用字符串。我使用了一个字符数组,并且我能够在字符数组上使用正则表达式

Buffer是映射到内存中的文件的副本,read是总大小。这段代码可以工作,但现在我想从函数中得到结果。我该怎么做

    if(std::regex_search(buffer, buffer + read, *params->pattern))
    {
        std::cout << "Found.";
    }

我没有测试这个,但它应该能工作

auto it = std::cregex_iterator(&buffer[0], &buffer[read], *params->pattern);

for (int i = 0; i < it->size(); ++i)
{
    const char* str = (*it)[i].str();
    size_t size = (*it)[i].length();

    std::cout.write(str, size);
}

我只在常规字符串上测试过这个。。不是包含空字符的字符串。我不明白为什么它不应该工作,因为它确实返回了一个字符序列和所述序列的长度。

您可以简单地删除\0并匹配整个字符串吗?有相当多的文件我必须定期执行此操作,这可能会大大降低性能。另外,我也不明白为什么这样做是必要的,因为当使用迭代器时,它会使函数变得无用,但由于某种原因,结果的第一个字符被忽略了。知道为什么吗?嗯,在使用.c_strHmm时,似乎省略了第一个字符。。必须是您的正则表达式或正在输入的数据。我无法看到它删除任何字符,尤其是第一个字符。不久前,我用常规字符串尝试了这个,结果匹配得很好。