\d 指匹配0-9中任意一个数字
\D 指匹配除了0-9中任意一个字符
select regexp_match('zhongguo1023','\d') 匹配结果:1
select regexp_match('zhongguo1023','\D') 匹配结果:z
\w 指匹配0-9,a-z,A-Z中任意一个字符
\W 指匹配除了0-9,a-z,A-Z中任意一个字符
select regexp_match('zhongguo1023','\w') 匹配结果:z
select regexp_match('zhongguo1023#','\W') 匹配结果:#
\s 指匹配空白符
\S 指匹配除了空白符
select regexp_match('zhongguo1023 ','\s') 匹配结果:空格
select regexp_match('zhongguo1023#','\S') 匹配结果:z
匹配多个字符,有2种写法,一种是+,另外一种是{}
匹配1023数字
select regexp_match('zhongguo1023','\d+') 匹配结果:1023
select regexp_match('zhongguo1023','\d{4}') 匹配结果:1023 ,{4}代表的意思是匹配4个数字,{2,3}代表的意思是匹配2或3个数字
[]的用法
select regexp_match('zhongguo1023','[0-9a-z]') 匹配结果:z ,[0-9a-z]代表的意思是匹配0-9,a-z中任意一个字符
select regexp_match('zhongguo1023','[0-9a-z]+') 匹配结果:zhongguo1023 ,[0-9a-z]+代表的意思是匹配至少一个0-9,a-z中的字符
^和$的用法
匹配除了1023数字的所有字符
select regexp_match('zhongguo1023','[^\d]+') 匹配结果:zhongguo
匹配除了zhongguo数字的所有字符
select regexp_match('zhongguo1023','[^zhongguo]+') 匹配结果:1023
匹配以英文字母开头的所有字符串
select regexp_match('zhongguo1023','^[a-zA-Z]+') 匹配结果:zhongguo
匹配以数字结尾的所有字符串
select regexp_match('zhongguo1023','\d+$') 匹配结果:1023
select regexp_match('zhongguo1023','[\d]+$') 匹配结果:1023
select regexp_match('zhongguo1023','[0-9]+$') 匹配结果:1023
匹配以数字开头并且以数字结尾的字符串
select regexp_match('2022','^[0-9]+$') 匹配结果:2022
注意^放在[]里面代表非,放在外面代表以什么开头
()的用法
例如把字符串"20220711"变成"2022年07月11号"
select regexp_replace('20220711','(\d{4})(\d{2})(\d{2})','\1年\2月\3号','g') 匹配结果: 2022年07月11号 ,()的意思代表第几部分,\1表示取第一部分
贪婪模式与非贪婪模式
贪婪模式:尽可能的匹配最长字符串,表达式是.*
非贪婪模式(也叫懒惰模式):尽可能的匹配最短字符串,表达式是.*?和.+?
有一个字符串"abcdefg123abc456abc"匹配以a开头并且以a结尾的字符串
.*的用法
select regexp_match('abcdefg123abc456abc','a.*a') 匹配结果:abcdefg123abc456a ,它匹配到了最后一个a就结束了
.*?的用法
select regexp_match('abcdefg123abc456abc','a.*?a') 匹配结果:abcdefg123a ,它匹配到了第二个a就结束了
.+?的用法
select regexp_match('abcdefg123abc456abc','a.+?a') 匹配结果:abcdefg123a ,它匹配到了第二个a就结束了
注意.*?与.+?区别在于:前者的*是指匹配0个或0个以上的字符串,后者匹配一个或者一个以上的字符串
.表是匹配一个字符
.+或者.*匹配多个字符
匹配cs后面的123
select regexp_match('ffcs123456 abcd123def','(?<=cs)123') 结果:123
匹配前面不是cs的数字123
select regexp_match('ffcs123456 abcd123def','(?<!cs)123') 结果:123
匹配abc前面的123
select regexp_match('ffff123abc abcd123def','123(?=abc)') 结果:123
匹配后面接的不是ss的数字123
select regexp_match('ffff123ss abcd123def','123(?!ss)') 结果:123