问题描述
我正在寻求有关使用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必须遵守。