前置知识
1.常见匹配符号
. :匹配所有单个字符,除了换行符(Linux 中换行是 \n,Windows 中换行是 \r\n)
^regex : 正则必须匹配字符串开头
regex$ :正则必须匹配字符串结尾
[abc] : 复选集定义,匹配字母 a 或 b 或 c
[abc][vz] :复选集定义,匹配字母 a 或 b 或 c,后面跟着 v 或 z
[^abc] :当插入符 ^ 在中括号中以第一个字符开始显示,则表示否定模式。此模式匹配所有字符,除了 a 或 b 或 c
[a-d1-7] :范围匹配,匹配字母 a 到 d 和数字从 1 到 7 之间,但不匹配 d1
XZ : 匹配 X 后直接跟着 Z
X|Z :匹配 X 或 Z
2 .元字符
元字符是一个预定义的字符。
\d :匹配一个数字,是 [0-9] 的简写
\D :匹配一个非数字,是 [^0-9] 的简写
\s :匹配一个空格,是 [ \t\n\x0b\r\f] 的简写
\S :匹配一个非空格
\w :匹配一个单词字符(大小写字母、数字、下划线),是 [a-zA-Z_0-9] 的简写
\W :匹配一个非单词字符(除了大小写字母、数字、下划线之外的字符),等同于 [^\w]
- 限定符
限定符定义了一个元素可以发生的频率。
? : 匹配 1 个或 0 个,是 {0,1} 的简写 X? 表示匹配 0 个或 1 个字母 X
{X} :只匹配 X 个字符 \d{3} 表示匹配 3 个数字,.{10} 表示匹配任何长度是 10 的字符串
{X,Y} :匹配 >=X 且 <=Y 个 \d{1,4} 表示匹配至少 1 个最多 4 个数字
*? :如果 ? 是限定符 * 或 + 或 ? 或 {} 后面的第一个字符,那么表示非贪婪模式(尽可能少的匹配字符),而不是默认的贪婪模式
以下具体生产案例:
对于hive表中字符串的一些异常不可见字符,可以用 regexp_replace函数,将不可见字符替换成空字符串。
常见的不可见的换行、制表符等可以用下面语句替换:
1.select regexp_replace(column, ‘\n|\t|\r’, ‘’)
如果知道字段只包括英文字母和数字,可以用下面语句处理掉非中文字符:
2.select regexp_replace(column,’[^a-zA-Z0-9]’,’’)
如果知道字段只包括中文字符,可以用下面语句处理掉非中文字符:
3.select regexp_replace(column,’[^\u4e00-\u9fa5]’,’’)
如果agent_name包含中文、英文字母和数字的话,可以用下面的正则,去掉其他字符;
4.regexp_replace(agent_name,’[^\u4e00-\u9fa5a-zA-Z0-9]’,’’)
rlike(str1,str2):str1只要包含str2就返回true
5.select ‘asdaa’ rlike ‘as|d’;–结果是true
REGEXP(str1,str2):str1只要包含str2就返回true
6.select REGEXP(‘adhshsj’,‘sd|ds|aa|dh’)–结果是true
7.select REGEXP(‘adhshsj’,‘sd|ds|aa|dh’)–结果是true
匹配
8.regexp_extract(app_version_name,’\w?\d+\.\d+\.\d+’,0)
示例:
9.select regexp_extract(‘6.17.8.9’,’\w?\d+\.\d+\.\d+’,0)–6.17.8
写在最后:如果本文对你有所帮助,欢迎点赞关注一波哈。