一、正则表达式
定义了一种规则去匹配符合规则的字符串。一般用来检索、替换那些符合某个模式(规则)的文本。
常见的正则表达式符号
^ 匹配行首,以什么开头
$ 匹配行尾,以什么结尾
* 匹配前面的子表达式任意次。
+ 匹配前面的子表达式一次或多次(大于等于1次)。
? 匹配前面的子表达式零次或一次。
x|y 匹配x或y。
[xyz] 字符集合。匹配所包含的任意一个字符。
[^xyz] 负字符集合。匹配未包含的任意字符。
\d 表示一位数字,等价于 [0-9]。
\D 匹配一个非数字字符。等价于 [^0-9]。
常用正则表达式
1、匹配身份证号
身份证号是一串18位数字和字母的组合,其中最后一位可能为数字或者字母 X。
[1-9]\d{5}(19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[Xx\d]
[1-9]\d{5} 匹配前六位地址码,第一位不能为 0。
(19|20)\d{2} 匹配出生年份,从 1900 年至今。
((0[1-9])|(1[0-2])) 匹配出生月份,01 至 12。
(([0-2][1-9])|10|20|30|31) 匹配出生日期,考虑了每个月的天数和闰年的情况。
\d{3} 匹配顺序码,通过性别和出生时间来区分。
[Xx\d] 匹配校验码,最后一位可能为数字或字母 X。
2、匹配手机号
1[3-9]\d{9}
3、匹配中文
[\u4e00-\u9fa5]
\u4e00 和 \u9fa5 是 unicode 编码,正好是中文编码开头和结尾对应的数值。
[],用于表示一个字符集合。 - 在 [] 中表示字符范围。
^[12]\d{2}$
这个正则表示以1或2开头的三位数
^表示字符串开头,[12]表示字符1或者2
\d表示一位数字,\d{2}表示两位数字,$表示字符串结束
notepad正则表达式使用
多行处理成一行
查找内容: \r\n
替换为: 需要替换的字符
二、脱敏
md5加密
select md5(linkmen) as linkmen from import_db.lianxiren;
如果字段值是个json串,想对其中的中文姓名进行脱敏,估计得写个百家姓的集合
select
linkmen,
regexp_replace(regexp_replace(linkmen,'1[2-9][0-9]{9}','***'),'[王|赵|钱|孙|李].','**') as linkmen2
from import_db.lianxiren;