2 somebodykiss somebodykiss 于 2014.12.12 13:32 提问

这段正则代码为什么能匹配含有汉字的字段?

软件平台:Ubuntu 14.04LTS的find命令

命令代码:

  find . -regextype "posix-extended" -regex "./[^x{4e00}-x{9fa5}]+.*"

效果:匹配所有含有汉字文件名的文件

疑问:utf编码 x{4e00}到 x{9fa5}是 汉字的区间,应该用 [x{4e00}-x{9fa5}]才对。但是只有[^x{4e00}-x{9fa5}] 才能实现以汉字开头的功能。

请问:为什么要用否定匹配符号?

2个回答

u014183683
u014183683   2014.12.12 14:26
已采纳

http://www.cnblogs.com/wenmaoyu/archive/2011/07/21/2113124.html

[^x]似乎是用来匹配双字节字符

caozhy
caozhy 回复somebodykiss: 赞,学到了。
大约 3 年之前 回复
somebodykiss
somebodykiss 谢谢提供的参考资料。问题基本高明白了:这是由于使用不同风格的regex造成的。用perl风格的话,[\x{4e00}-\x{9fa5}]+.* 可以进行匹配。但是用posix-extended风格的正则,只能用[\x00-\xFF]匹配双字节(包括汉字)。而posix-extend和perl都 不支持[\u4e00-\u9fa5]这种方法。参考《Unicode Regular Expressions》http://www.regular-expressions.info/unicode.html
大约 3 年之前 回复
q107770540
q107770540   Ds   Rxr 2014.12.12 13:44

匹配汉字应该用 [\u4E00-\u9FA5]+

http://ubuntu-rubyonrails.blogspot.com/2009/06/unicode.html

somebodykiss
somebodykiss 我不知道是不是用在find命令中的问题, [\u4E00-\u9FA5]+ 没有效果。
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!