如何将pcre2_match与二进制主题数据一起使用

问题描述

我正在寻求有关使用pcre2_match的说明。

背景:我正在使用PCRE2在不区分大小写的二进制文件中搜索unicode文本片段。

此函数的声明:

int pcre2_match(const pcre2_code *code,PCRE2_SPTR subject,PCRE2_SIZE length,PCRE2_SIZE startoffset,uint32_t options,pcre2_match_data *match_data,pcre2_match_context *mcontext);

此功能的手册页然后指出:

长度和起始偏移量值是代码单位,而不是字符。

现在,当主题数据为二进制时,由于数据不一定采用任何干净的UTF格式,因此我无法确定代码单位。因此,我无法确定代码单位。

我所知道的是主题数据的字节数。而且似乎没有办法让我告诉函数它将查看二进制数据。

如何确保此函数理解我正在传递字节数,以便它不会尝试检测代码点,从而可能超过或缩短我要搜索的内存量?

解决方法

代码单位是输入的原子片段。至于pcre2_match_8,它是字节,pcre2_match_16,它是uint16_t,依此类推。如果传递无效的utf选项,则可以搜索二进制数据,但是只能从任何字节位置搜索utf8。如果您搜索utf16,它将从第二个字节开始搜索。自然对齐是cpu的要求,PCRE必须遵守。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...