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

How to use pcre2_match with binary subject data

我正在寻求有关使用 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);

此函数的手册页然后指出:

The length and startoffset values are code units, not characters.

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

我只知道主题数据的字节数。而且似乎没有选项可以告诉函数它将查看二进制数据。

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

代码单元是输入的原子片段。至于pcre2_match_8,是byte,pcre2_match_16,是uint16_t,等等。如果传入invalid utf选项,可以搜索二进制数据,但只能从任意字节位置开始搜索utf8。如果搜索 utf16,它将每隔一个字节搜索一次。自然对齐是一项 cpu 要求,PCRE 必须尊重它。