当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《多字节字符串的正则表达式字边界》经验,为你挑选了1个好方法。

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

"\ bpaper\b"匹配"纸"

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

"\ b纸张\ b"与"纸张"不符

我错过了什么吗?任何帮助将受到高度赞赏.

请求的信息:

编程语言:C

正则表达式库:GNU C(regex.h)

谢谢.



1> bobince..:

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

在这种情况下什么是"多字节"?编码为UTF-8字节的字符串?特定于语言环境的多字节编码,例如GB?

如果您没有本地处理宽(Unicode)字符串,那么您不能指望对非ASCII字符的支持,而不仅仅是检测它们.POSIX正则表达式没有为ASCII范围之外的字节指定任何字符类,因此它不知道"\ xe7\xb4\x99"中的任何字节('纸'的UTF-8表示)都可以考虑字信件; 因此它没有看到任何字界.

Unicode中的字母或单词构成的问题比简单的ASCII正则表达式可以处理的问题更为复杂.(显然,用中文构成'单词'的内容本身就是可论证的.)如果你想要检测的只是普通的旧空间,你可以明确地做到这一点:

(\s|^)??(\s|$)

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有