如何获得与不可打印的 Unicode 或 ASCII 字节匹配的正则表达式?
char cData[1024] = { 0 };
memcpy(cData, "\x00\x04\x02\x08\x00hello thats it", 19);
std::regex r2e("([\\x00-\\x1F]){5}(.?)*", std::regex_constants::basic);
if (std::regex_search((char*)cData, cData+19, r2e))
printf("ok");
else
printf("nok");
我的示例不工作(打印“nok”)。
最佳答案
这是解决方案:
std::regex r2e("[\x00-\x1F]\\{5\\}.*", 12, std::regex_constants::basic);
注意事项:
您需要在
[ - ]
范围内插入文字字符。{
需要在基本正则表达式中进行转义。(.?)*
与.*
效果相同。您必须使用此构造函数,它需要字符串的长度作为另一个参数,因为
\x00
空字符将结束字符串。
关于c++ - 正则表达式不可打印字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38147293/