MySQL正则表达式

1、regexp_instr

语法:regexp_instr(expr,pat[,pos[,occurrence[,return_option[,match_type]]]]) 指定位置开始是否符合正则表达式

– 匹配字符‘,’,从第一个字符串开始查找,第一次出现的位置,没有则返回0
select regexp_instr(‘abc,ABC,AAA,BBB,bbb’,’,’,1,1) from dual;
select regexp_instr(‘abc,ABC,AAA,BBB,bbb’,’-’,1,1) from dual;

– 匹配字符‘,’,从第一个字符串开始查找,第二次出现的位置,没有则返回0
select regexp_instr(‘abc,ABC,AAA,BBB,bbb’,’,’,1,2) from dual;

– 匹配字符‘,’,从第三个字符串开始查找,第一次出现的位置,没有则返回0
select regexp_instr(‘abc,ABC,AAA,BBBB,bbb’,’,’,3,1) from dual;

– 匹配字符‘,’,从第一个字符串开始查找,第二次出现的位置的后一个,没有则返回0
select regexp_instr(‘abc,ABC,AAA,BBB,bbb’,’,’,1,2,0) from dual;

– 匹配字符‘,’,从第一个字符串开始查找,第二次出现的位置的当前位置,没有则返回0
select regexp_instr(‘abc,ABC,AAA,BBB,bbb’,’,’,1,2,1) from dual;

2、regexp_like

语法:regexp_like(expr,pat[,match_ype]) 判断字符串是否符合正则表达式

– 筛选emp表中名称以A开头的员工 等同于 like ‘A%’
select * from emp where regexp_like(ename,’^A’);
select * from emp where ename like ‘A%’;

– 筛选emp表中名称以K结尾的员工 等同于 like ‘%K’
select * from emp where regexp_like(ename,‘K$’);
select * from emp where ename like ‘%K’;

– 筛选emp表中名称是A的员工 等同于=A
select * from emp where regexp_like(ename,’^A$’);
select * from emp where ename =‘A’;

– 筛选emp表中名称A开头或则B开头的员工 等同于 like ‘A%’ or like ‘B%’
select * from emp where regexp_like(ename,’1’);
select * from emp where ename like ‘A%’ or like ‘B%’;
– 等同于 like ‘A%’ or like ‘B%’ or …
select * from emp where regexp_like(ename,’2’);
– 等同于 like ‘%E’ or like ‘%R’
select * from emp where regexp_like(ename,’[ER] ′ ) − − 等 同 于 l i k e ′ s e l e c t ∗ f r o m e m p w h e r e r e g e x p l i k e ( e n a m e , ′ [ A − E ] ') -- 等同于 like '%A' or like '%B' or ... select * from emp where regexp_like(ename,'[A-E] ′)−−等同于like′select∗fromempwhereregexpl​ike(ename,′[A−E]’)

– "+"表示匹配前面的子表达式一次或多次 等同于 like ‘%A%’
select * from emp where regexp_like(ename,’[A-B]+’);
select * from emp where regexp_like(ename,‘A+’);

– ""表示匹配前面的子表达式零次或多次
select * from emp where regexp_like(ename,’[0-9]
’);
select * from emp where regexp_like(ename,’[a-z]’);
select * from emp where regexp_like(ename,'A
’);

3、regexp_replace

语法:regexp_replace(expr,pat,new_str) 替换满足正则表达式的字符

– 去掉字符串中的指定字符
select regexp_replace(‘ABCDEFGHI’,‘A’,5) from dual;
select regexp_replace(‘ABCDEFGHI’,’[AI]’,5) from dual;
select regexp_replace(‘ABCDEFGHI’,’[A-H]’,5) from dual;
select regexp_replace(‘AABBAACCDD’,‘A+’,55) from dual;
select regexp_replace(‘AABBAACCDDCC’,’[A-C]’,5) from dual;

4、regexp_substr

语法:regexp_substr(expr,pat,pos,idx) 返回符合正则表达式的字符串

select
regexp_substr(‘192.168.125.11’,’[^.]+’,1,1) a,
regexp_substr(‘192.168.125.11’,’[^.]+’,1,2) b,
regexp_substr(‘192.168.125.11’,’[^.]+’,1,3) c,
regexp_substr(‘192.168.125.11’,’[^.]+’,1,4) d
from dual;


  1. ABC ↩︎

  2. A-C ↩︎

更多推荐