

REGEXP_LIKE:返回指定字符串是否符合给定的正则表达式
REGEXP_SUBSTR:返回在指定字符串中截取出的符合给定正则表达式的子串
REGEXP_INSTR:返回在指定字符串中符合给定正则表达式的子串的开始位置
REGEXP_REPLACE:返回将指定字符串中符合给定正则表达式的子串替换为指定子串后的结果
REGEXP_COUNT:返回字符串中包含符合给定正则表达式的子串的个数

SELECT 1FROM dualWHERE regexp_like('yusuf@besthelp.vip.com','^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$');
REGEXP_LIKE(String, Regexp)
SQL> WITH str AS2 (SELECT '张三|白嫖|违反治安管理' s, '|' sp FROM dual)3 SELECT substr(s, 1, instr(s, sp) - 1) name4 ,substr(s5 ,instr(s, sp) + 16 ,instr(s, sp, instr(s, sp) + 1) - instr(s, sp) - 1) incident7 ,substr(s, instr(s, sp, instr(s, sp) + 1) + 1) charge8 FROM str;NAME INCIDENT CHARGE------ -------- ------------------张三 白嫖 违反治安管理
刚写完代码,外围系统的工作人员发来 QQ:“不好意思啊,哥,刚才的示例写错了,还有年龄和性别,麻烦改一下”
SQL> WITH str AS2 (SELECT '张三|男|33|白嫖|违反治安管理' s FROM dual)3 SELECT regexp_substr(s, '[^\|]+', 1,level) sub4 FROM str5 CONNECT BY LEVEL <= regexp_count(s, '\|') + 1;SUB----------------张三男33白嫖违反治安管理
妈妈再也不用担心小刘会辞职了!
REGEXP_COUNT(String, Regexp, StartPos, Mode)

SQL> WITH str AS2 (SELECT 'FFFFPXMMS' s FROM dual)3 SELECT least(instr(s, 'S'), instr(s, 'P'), instr(s, 'X')) FROM str;LEAST(INSTR(S,'S'),INSTR(S,'P'),INSTR(S,'X'))---------------------------------------------5
按照礼节,这时对方开发又发来 QQ:“哥...”
SQL> WITH str AS2 (SELECT 'FFFFPXMMS' s FROM dual)3 SELECT regexp_instr(s, 'S|P|X') FROM str;REGEXP_INSTR(S,'S|P|X')-----------------------5
REGEXP_INSTR(String, Regexp, StartPos, Occurence, ReturnOpt, Mode)

这时需要我们在用户录入数据后、写入数据表前,加以处理,将字符串首尾处的空白字符去掉,使用 TRIM 操作的话,需要考虑各种空白字符的可能,这时使用 REGEXP_REPLACE 则可轻松解决
SQL> SELECT regexp_replace(chr(9) || chr(10) || chr(13) || chr(32) || '?' ||2 chr(9) || chr(10) || chr(13) || chr(32)3 ,'(^\s*)|(\s*$)'4 ,'') RESULT5 FROM dual;RESULT------?
ReplaceStr:替换子串,默认为NULL


文章转载自SQL干货分享,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




