libc regcomp和regexec中的多字节字符

bil*_*l_e 7 regex glibc utf-8 libc multibyte-functions

有没有得到正则libc6表达式函数regcompregexec使用多字节字符正常工作?

例如,如果我的模式是utf8字符??+?,则在utf8编码的字符串上找到匹配?????将失败,它应该成功.

我认为这是因为字符?的字节表示是\xe6\x9c\xba,并且+匹配一个或多个字节\xba.我可以通过在模式中的每个多字节字符周围加括号来使这个实例工作,但由于这是一个应用程序,我不能要求用户这样做.

有没有办法标记一个模式或字符串匹配为包含utf8字符?也许告诉libc将模式存储为wchar而不是char?

Cha*_*nac 1

根据其手册页,glibc理解 POSIX regexp。POSIX regexp本身不支持 unicode 。请参阅此答案以获取阐明这一点的标准摘录。这意味着您也可以忘记 UTF。这也意味着无论您所处的区域设置环境如何,多字节字符都不适合。

我提到的帖子(以及这篇文章)建议您使用一些支持 unicode 的正则表达式库,例如pcre。如果您有兴趣,pcre提供了一个假的 posix 接口,并添加了一个非标准 REG_UTF 标志。除了 #include 指令以及在编译步骤添加 REG_UTF 之外,您不必重写代码。

希望这能满足您的需求。