Oracle中与正则表达式相关的函数介绍

本文面向的是对其它语言的正则表达式相关语法有详细了解的读者。所以,关于正则表达式的语法不会单独介绍,只是会在介绍相关函数使用方法时,对于涉及到的正则表达式会有相应的说明。

  1. regexp_like(srcstr,pattern,match_modifier)
  • srcstr表示搜索的源字符串
  • pattern表示匹配的目标字符串
  • match_modifier匹配符,如i为不区分大小写
    该函数由于检验字符串中是否含有给定模式的字符串,匹配成功则返回true,否则返回false
begin
dbms_output.put_line(case when regexp_like('zhangsan,lisi,wangwu','^(([a-z]*),)+([a-z]*)$','i') then 'contain' else 'not contain' end);
end;

上述SQL输出结果为contain
[a-z]表示为字符集a,b,c,…z中的任意一个字符
[a-z]*表示一个或多个字符集a,b,c,…z中的任意字符
^表示行开始,$表示行结束
i为修饰符,表示匹配模式时不区分大小写。

  1. regexp_instr(srcstr,pattern,beginpos,occurrence,returnoption,match_modifier,subexpression)
  • srcstr表示搜索的源字符串
  • pattern表示定位的目标字符串
  • beginpos从哪个位置开始检索
  • occurrence表示定位的字符串在源自符串中出现的次数,如第一次、第二次…
  • returnoption:0表示返回定位字符串的起始的索引位置,1返回终止的索引位置
  • match_modifier:匹配符
  • subexpression:子表达式,从左往右括号括起来的表达式分别为子表达式1,2,3,4
select regexp_instr('zhangsln,lisi,wangwu','(^|,)(l[a-z]*)(,|$)',1,1,0,'i',2) from dual;

上述SQL用于检索逗号分隔的字符串中以l开头的字符串起始索引位置
(^|,)表示为行起始字符或者前面为分隔符,第一个子表达式
(l[a-z]*)表示以l开头的字符串,为第二个子表达式
(,|$)表示后面跟着,或者行结尾,为第三个子表达式
故上述SQL的结果为字符串lisi在整个字符串中的索引位置为9.

  1. regexp_substr(srcstr,pattern,beginpos,occurrence,match_modifier,subexpression)
  • srcstr表示搜索的源字符串
  • pattern表示目标字符串模式
  • beginpos从哪个位置开始检索
  • occurrence表示定位的字符串在源自符串中出现的次数,如第一次、第二次…
  • match_modifier:匹配符
  • subexpression:子表达式
select regexp_substr('zhangsln,lisi,wangwu','(^|,)(l[a-z]*)(,|$)',1,1,'i',2) from dual;

如上所述,我们容易知道执行上述SQL用于提取逗号分隔的字符串中以l开头的字符串,故SQL执行结果为lisi

  1. regexp_count(srcstr,pattern,beginpos,match_modifier)
  • srcstr表示搜索的源字符串
  • pattern表示目标字符串模式
  • beginpos从哪个位置开始检索
  • match_modifier:匹配符
select regexp_count('zhangsan,lisi,wangwu','[a-z]*,|[a-z]$',1,'i') from dual;

上述SQL用于统计逗号分隔字符串的个数。

  1. regexp_replace(srcstr,pattern,replacement,beginpos,occurrence,match_modifier)
  • srcstr表示搜索的源字符串
  • pattern表示被替换的字符串模式
  • replacement表示用于替换的字符串
  • beginpos从哪个位置开始检索
  • occurrence表示被替换的字符串在源自符串中出现的次数,如第一次、第二次…
  • match_modifier:匹配符
select regexp_replace('zhangsan,lisi,lisi','(^|,)(l[a-z]*)(,|$)','\1wangmazi\3',1,1,'i') from dual

上述SQL用于替换第一次出现的字符串lisi为wangmazi
\1wangmazi\3中\1表示第一个子表达式,\3表示第三个子表达式
上述sql的结果为zhangsan,wangmazi,lisi

  1. 关于贪婪型、勉强型正则表达式的问题参考我的另一篇博文浅谈Java正则表达式勉强型、贪婪型模式,虽然是以Java为例,但是结论是一样的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值