【发布时间】:2020-09-01 16:30:36
【问题描述】:
我正在寻求有关使用 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);
该函数的手册页随后指出:
length 和 startoffset 值是代码单位,而不是字符。
现在,当主题数据是二进制时,我无法确定代码单元,因为数据不一定是任何干净的 UTF 格式。因此我无法确定代码单元。
我只知道主题数据的字节数。而且似乎没有任何选项可以让我告诉该函数它将查看二进制数据。
如何确保此函数了解我传递的字节数,以便它不会尝试检测代码点,从而可能超过或缩短我希望它搜索的内存量?
【问题讨论】:
-
我很难相信
length和startoffset是 not 字节数。是什么让您认为它们不是? -
我认为您误解了该手册页声明。你怎么知道长度呢? C 中的
char也不是字符 =D -
@Jason 在 OP 使用 16 位或 32 位代码单元版本的库的(不太可能)情况下,它们不是字节数。请参阅pcre.org/current/doc/html/pcre2.html的介绍