码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-12-12 11:19:56      阅读:517      评论:0      收藏:0      [点我收藏+]

标签:解决   正则表达   one   常见   多个   false   分享   技术分享   英文   

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

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

??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 编码

标签:解决   正则表达   one   常见   多个   false   分享   技术分享   英文   

原文地址:https://www.cnblogs.com/gaara0305/p/10107159.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!