gpt4 book ai didi

多字节字符串的正则表达式字边界

转载 作者:行者123 更新时间:2023-12-01 11:10:23 24 4
gpt4 key购买 nike

我在我的搜索应用程序中使用 posix c 正则表达式库 (regcomp/regexec)。我的应用程序支持不同的语言,包括那些使用多字节字符的语言。我在使用单词边界元字符 (\b) 时遇到问题。对于单字节字符串,它工作得很好,例如:

"\bpaper\b"匹配 "paper"

但是,如果正则表达式和查询字符串是多字节的,它似乎无法正常工作,例如:

“\b纸张\b”不匹配“纸张”

我错过了什么吗?任何帮助将不胜感激。

请求的信息:

  • 编程语言:C
  • 正则表达式库:GNU C (regex.h)

谢谢。

最佳答案

if the regex and query strings are multi-byte, it doesn't seem to work correctly

在此上下文中什么是“多字节”?编码为 UTF-8 字节的字符串?特定于语言环境的多字节编码,例如 GB?

如果您本身不处理宽 (Unicode) 字符串,那么除了检测它们的存在之外,您不能指望对非 ASCII 字符有更多的支持。 POSIX 正则表达式没有为 ASCII 范围之外的字节指定任何字符类,因此它不知道可以考虑“\xe7\xb4\x99”(“纸”的 UTF-8 表示)中的任何字节单词字母;因此它看不到单词边界。

在 Unicode 中,什么构成字母或单词是一个比简单的 ASCII 正则表达式更复杂的问题。 (显然,中文中“词”的构成本身是有争议的。)如果你只想检测普通的旧空格,你可以明确地这样做:

(\s|^)紙張(\s|$)

关于多字节字符串的正则表达式字边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/629377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com