【Oracle】regexp_substr()函数

一、参数解释说明:

function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)
string:需要进行正则处理的字符串
pattern:进行匹配的正则表达式
position:起始位置,从字符串的第几个字符开始正则表达式匹配(默认为1) 注意:字符串最初的位置是1而不是0
occurrence:获取第几个分割出来的组(分割后最初的字符串会按分割的顺序排列成组)
modifier:模式(‘i’不区分大小写进行检索;‘c’区分大小写进行检索。默认为’c’)针对的是正则表达式里字符大小写的匹配

二、案列分析

1、SELECT REGEXP_SUBSTR(‘11a22A33a’,’[^A]+’,1,1,‘i’) AS STR FROM DUAL;
结果:11
分析:正则表达式是以A为标识进行分割,而’i’标识不区分大小写,所以结果是11,而不是11a22

2、SELECT REGEXP_SUBSTR(‘11a22A33a’,’[^A]+’,1,1,‘c’) AS STR FROM DUAL;
结果:11a22
分析:正则表达式是以A为标识进行分割,而’c’标识区分大小写,所以结果是11a22,而不是11

三、关联REGEXP_SUBSTR函数的occurrence

SELECT REGEXP_SUBSTR(‘11a22A33a’,’[^A]+’,1,level,‘c’) AS STR  FROM DUAL  connect by level<=5;

分析:把要输出来的第几个子串,通过一个变量level转换成输出多少个子串。level<=5代表的是输出5个,没有的为null。这样显然会输出多余null值,这不是我们想要的。

优化(直接输出为列):

SELECT REGEXP_SUBSTR(‘11a22A33a’,’[^A]+’,1,level,‘c’) AS STR  FROM DUAL  
connect by level<=  length(‘11a22A33a’)-length(REGEXP_REPLACE(‘11a22A33a’,‘A’,’’))+1;

或者(直接输出为列):

SELECT REGEXP_SUBSTR(‘11a22A33a’,’[^A]+’,1,level,‘c’) AS STR  FROM DUAL
connect by level<=  (regexp_count(‘11a22A33a’,’\A’)+1)

四、正则表达式总结

略(请查看原文)

参考文章

https://blog.csdn.net/a720561252803/article/details/90487187

https://blog.csdn.net/u011165335/article/details/82832294

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值