淘先锋技术网

首页 1 2 3 4 5 6 7

前置知识

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. 限定符

限定符定义了一个元素可以发生的频率。

? : 匹配 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

写在最后:如果本文对你有所帮助,欢迎点赞关注一波哈。