正则表达式——推荐使用 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 编码的主要内容,如果未能解决你的问题,请参考以下文章