一、 like和regexp的区别
1、like是完全匹配
%:表示任意0个或多个字符。可匹配任意类型和长度的字符
%%:有些情况下若是中文,请使用两个百分号(%%)表示。
_: 表示任意单个字符。
[ ]:表示括号内所列字符中的一个。
[^ ] :表示不在括号所列之内的单个字符。
2、regexp是部分匹配,等同于rlike
二、正则表达式
(一)regexp操作符
1、匹配内容:
- […] :匹配 […] 中的所有字符,例如 [aeiou] 匹配字符串 “google runoob taobao” 中所有的 e o u a 字母。
- [^…] :匹配除了 […] 中字符的所有字符,例如 [^aeiou] 匹配字符串 “google runoob taobao” 中除了 e o u a 字母的所有字母。
- p1|p2|p3 匹配 p1 或 p2 或 p3。例如,‘z|food’ 能匹配 “z” 或 “food”。’(z|f)ood’ 则匹配 “zood” 或 “food”。
[A-Z]:匹配所有大写字母,[a-z] 表示所有小写字母。[A-Za-z]匹配所有字母。- . :匹配除换行符(\n、\r)之外的任何单个字符,相等于 [^\n\r]。
- (…):对expression进行分组。
2、重复次数:
- *:表示匹配前一个字符0次或无限次;贪婪匹配,即尽可能多的匹配。
- +:表示匹配前一个字符1次或无限次;贪婪匹配,即尽可能多的匹配。
- ?:表示匹配前一个字符的0次或1次
- +或* 后跟?:非贪婪匹配,即尽可能少的匹配。
- .* ? :表示匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。如:a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab和ab。
- {n} :匹配确定的 n 次。例如,‘o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。
- {n,m} :最少匹配 n 次且最多匹配 m 次。
3、匹配位置:
- ^ :匹配输入字符串的开始位置。
- $ :匹配输入字符串的结束位置。
(二)regexp_extract
regexp_extract(string subject, string pattern, int index)
(1)第一参数: 要处理的字段
(2)第二参数: 需要匹配的正则表达式
(3)第三个参数:
0是显示与之匹配的整个字符串
1 是显示第一个括号里面的
2 是显示第二个括号里面的字段…
select regexp_extract('hitdecisiondlist','(i)(.*?)(e)',0) ;
结果:itde
select regexp_extract('hitdecisiondlist','(i)(.*?)(e)',1) ;
结果:i
select regexp_extract('hitdecisiondlist','(i)(.*?)(e)',2) ;
结果:td