标签:解决 正则表达 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字符。
标签:解决 正则表达 one 常见 多个 false 分享 技术分享 英文
原文地址:https://www.cnblogs.com/gaara0305/p/10107159.html