正则表达式区分中英文
转载至:http://www.chedong.com/blog/archives/001261.html 作者:车东
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
正则表达式用了几年了,本以为这个问题很简单:把所有查询关键词中纯英文(包括数字)的滤出来;但是折腾了一下午才总算找到了以下解决方法:iconv -f gbk -t utf-8 query_list |egrep -e "^[a-z0-9]*$"
1 为什么需要用utf-8: 如果直接对gbk编码的文字进行grep会由于编码中的交叉而滤出很多中文;
2 为什么需要用egrep: egrep=grep -E 就是正则表达式支持扩展字符集,扩展的正则支持用高八位字符;
关键:先将文本强制转换成UTF-8,然后利用egrep。
适用环境:Unix命令行模式下的grep;
有更简单的方法吗:请留言……
尝试一:
为了解决滤出字母数字查询词,先是直接grep "^[A-Za-z0-9]+$",但是总是滤出大量的中文
尝试二:
后来无意中发现使用egrep "^[a-z0-9]+$" 可以大大减少中文的量,推断关键词是GBK格式的,GBK和英文编码含有大量交叉;
尝试三:
在网上找到很多文档都是转载:使用 [\x00-\xFF] 这样的正则表达式,但是没有说明,其应用的环境是在javascript这样的环境中,js已经是将字符转换成unicode来处理了,这种环境在另外的开发环境中可能就不适用了