含中文:  where name regexp  '[^ -~]'
不含中文:   where name not regexp '^[^ -~]'
后来说需要查询日文 参考资料得知:
utf-8 (unicode)
/u4e00-/u9fa5 (中文)
/x3130-/x318f (韩文)
/xac00-/xd7a3 (朝鲜文)
/u0800-/u4e00 (日文)
汉字正则: e[4-9][0-9a-f]{4}
含中文: where hex(name) regexp ‘e[4-9][0-9a-f]{4}’
我表示很纳闷,这个正则如何而来的。
sql中执行:
select *,hex(name) from test;
'1', '我是中国人', 'E68891E698AFE4B8ADE59BBDE4BABA'
得知: 我-E68891,是-E698A,中-E4B8AD,国-E59BBD,人-E4BABA
也不知道啥么东西,用chrome “FE web前端助手"字符串编码转换后的知是utf8, 我->我
接着就想到在python中获取他的utf8编码:
u'我'
u'\u6211'
'我'
'\xe6\x88\x91'
“我”在sql中对应的HEX 16进制结果就是E68891,正好符合。
上文所提到的正则 ‘e[4-9][0-9a-f]{4}’也就有解了。
u'\u4e00'.encode('utf8')
'\xe4\xb8\x80'
u'\u9fa5'.encode('utf8')
 '\xe9\xbe\xa5'
诈一看,还真是这样,但是b880-bea5区间仅仅用0-f笼统该快太不规范了...不做处理了.
中文utf8编码区间:\u4e00-\u9fa5 --> e4b880-e9bea5 --> e[4-9][0-9a-f]{4}
日文utf8编码区间:\u0800-\u4e00 --> e4b880 e9bea5
e[0-4][0-9a-b][0-8][0-8]0
e[0-4][0-9a-a][0-9a-f]{3}
e[0-4][0-9a-b][0-8][0-7][0-9a-f]
日文正则:e[0-4][0-9a-a][0-9a-f]{3}|e[0-4][0-9a-b][0-8][0-7][0-9a-f]|e[0-4][0-9a-b][0-8][0-8]0|e[0-4][0-9a-b][0-8][0-7][0-9a-f]
日文正则(简化):e[0-4][0-9a-a][0-9a-f]{3}|e[0-4][0-9a-b][0-8][0-7][0-9a-f]
韩文utf8编码区间:\xac00-\xd7a3 --> c2ac00 c397a3
正则:
c[2-2][0-9]6[0-9a-f]{2}
c[2-2][0-9]6[0-9][0-9a-f]
c[2-2][0-9]6[0-9]a[0-3]
c[2-2]a[0-9a-b][0-9a-f]{2}
c[2-2][0-9a-a][0-9a-c]00
...
突然发现:韩文正则将会很多很复杂...
那干脆用十进制吧...
select conv('c2ac00',16,10),conv('c397a3',16,10);
12758016, 12818339
貌似需要数值的还要用正则,太麻烦了,用到for循环还不如直接用十六进制between and
....
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐