正则表达式——推荐使用 Unicode 编码

Posted gaara0305

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式——推荐使用 Unicode 编码相关的知识,希望对你有一定的参考价值。

??常见的正则表达式的文档都是关于英文(ASCII字符)的,英文开发者通常也只需要处理ASCII字符,不需要处理中文这类多字符的字符。不过,依照李处ASCII字符的方式处理中文字符,就有可能出错。

??举个例子,许多文档说点号.可以匹配“除换行符 之外的任意字符”,单这可能只适用于单字节字符,因为点号匹配的其实只是“除换行符 之外的任意字符”而已。

??Python 2

re.search(r"^.$", "发") != None     # => false

??php 4.x/5.x

preg_match("/^.$/", "发");          // => 0, 表示成功匹配的次数为0

??Ruby 1.8

"发" =~ /^.$/ != nil                # => false

??之所以会出现这种情况,是因为正则表达式在匹配时“看到”的字符串是多个字符(在UTF-8编码环境下占用3个字节;在GBK编码环境下占用2个字节),于是将它们全部视为单字节字符,而没有理解这几个字节表示的是“发”;因为点号.只能匹配一个字符,结果当然不能正确匹配。要解决这个问题,必须显示指定编码,让正则表达式处理程序正确识别多字节字符,Python中的做法是在字符串的开头的引号之前写上u字符。

技术分享图片
技术分享图片
技术分享图片



以上是关于正则表达式——推荐使用 Unicode 编码的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式——Unicode

正则表达式之匹配汉字

[正则表达式]匹配Unicode

字符编码Unicode-正则表达式验证

正则表达式系列之 —— Unicode:修饰符 "u" 和类 p{...}

正则表达式系列之 —— Unicode:修饰符 "u" 和类 p{...}