本文章如果有误请指正,而且我的正则都是自己研究+百度,如果有更好的办法,请赐教,O(∩_∩)O哈哈~
数据情况 取数规则
1 英文+汉字 取出汉字
2 英文+数字+汉字 取出汉字
3 英文+数字(身份证号的) 取出全部取出,未见到有其他英文加数字到的,如asd12344
4 数字(身份证号,手机号,客户编码) 取出数字
5 英文 取出英文
6 汉字 取出汉字
7 特殊字符+汉字 取出汉字
8 数字+汉字 取出汉字
思路
(参考文章https://blog.csdn.net/thewindkee/article/details/52785763)
不包含abc但包含admin的字符串。那么让 不包含abc的字符串出现在 admin 的两端?
^((?!abc).)*admin((?!abc).)*$
^((?![A-Za-z0-9]).)*[\\u4e00-\\u9fa5]((?![A-Za-z0-9]).)*$
表只有一个字段str1
数据 结果
!#@$%
asdw冯若丰 冯若丰
asdw987654321冯若丰 冯若丰
33062420090606035X 33062420090606035X
16601181189 16601181189
20194 20194
Judy Judy
冯若丰 冯若丰
$@&%$@.冯若丰 冯若丰
666冯若丰 冯若丰
匹配情况
返回值为true或false 选定结果为是true的
1.英文+汉字
select regexp(str1,'^((?![0-9.]).)*([\\u4e00-\\u9fa5][A-Za-z])|([A-Za-z][\\u4e00-\\u9fa5])((?![0-9.]).)*$') from sunregexp;
asdw冯若丰
2.英文+数字
select regexp(str1,'^((?![\\u4e00-\\u9fa5.]).)*([0-9][A-Za-z])|([A-Za-z][0-9])((?![\\u4e00-\\u9fa5.]).)*$') from sunregexp;
33062420090606035X
3.只包含汉字
select regexp(str1,'^((?![A-Za-z0-9.]).)*[\\u4e00-\\u9fa5]((?![A-Za-z0-9.]).)*$') from sunregexp;
冯若丰
4.只包含数字
select regexp(str1,'^((?![A-Za-z\\u4e00-\\u9fa5]).)*[0-9]((?![A-Za-z\\u4e00-\\u9fa5]).)*$') from sunregexp;
16601182089
20194
5.只包含英文
select regexp(str1,'^((?![0-9\\u4e00-\\u9fa5]).)*[A-Za-z]((?![0-9\\u4e00-\\u9fa5]).)*$') from sunregexp;
Judy
6.other case:
特殊字符+汉字
数字+汉字
英文+数字+汉字
SQL
select
if(regexp(str1,'^((?![0-9.]).)*([\\u4e00-\\u9fa5][A-Za-z])|([A-Za-z][\\u4e00-\\u9fa5])((?![0-9.]).)*$'),regexp_replace(str1,'[[^\\u4e00-\\u9fa5]]',''),
if(regexp(str1,'^((?![\\u4e00-\\u9fa5.]).)*([0-9][A-Za-z])|([A-Za-z][0-9])((?![\\u4e00-\\u9fa5.]).)*$'),regexp_replace(str1,'[[^A-Za-z0-9]]',''),
if(regexp(str1,'^((?![A-Za-z0-9.]).)*[\\u4e00-\\u9fa5]((?![A-Za-z0-9.]).)*$'),str1,
if(regexp(str1,'^((?![A-Za-z\\u4e00-\\u9fa5]).)*[0-9]((?![A-Za-z\\u4e00-\\u9fa5]).)*$'),str1,
if(regexp(str1,'^((?![0-9\\u4e00-\\u9fa5]).)*[A-Za-z]((?![0-9\\u4e00-\\u9fa5]).)*$'),str1,
regexp_replace(str1,'[[^\\u4e00-\\u9fa5]]',''
)
)
)
)
)
)
from sunregexp