正则表达式是一种强大的实用的字符串操作工具,可以用一定的字符及其组合逻辑进行灵活、强大的查找、匹配、替换等字符串操作。Oracle作为数据库行业执牛耳者,对正则表达式支持比较完善。

Oracle正则表达式函数

函数语法

REGEXP_LIKEREGEXP_LIKE(source_str,pattern,[match_parameter])

REGEXP_SUBSTRREGEXP_SUBSTR(source_str,pattern,[position],[occurrence],[match_parameter])

REGEXP_INSTRREGEXP_INSTR(source_str,pattern,[position],[occurrence],[return_option],[match_parameter])

REGEXP_REPLACEREGEXP_REPLACE(source_str,pattern,replace_str,[position],[occurrence],[match_parameter])

REGEXP_COUNTREGEXP_COUNT(source_str,pattern,[position],[match_parameter])

注:[]为可选项

参数含义

source_str输入的字符串,可以是列名或者字符串常量、变量。

pattern正则表达式。

match_parameter匹配选项。取值范围: i:大小写不敏感; c:大小写敏感;

n:点号 . 不匹配换行符号;

m:多行模式,开启则将^和$作为源串中的任何地方的任何行的分别的开始和结束,而不是仅在整个源串的开始或结束。如果省略此参数,则将源字符串视为单行。

x:扩展模式,忽略正则表达式中的空白字符。

position标识从第几个字符开始正则表达式匹配,默认为1

occurrence标识第几个匹配组。默认为1

replace_str替换的字符串,可以使用捕获组(\n调用,n为第n个捕获组)

return_option仅regexp_instr适用,0:默认值,返回pattern第一个字符出现的位置,1:pattern结束后下一个字符起始位置

regexp_like :只能放在where后作条件表达式,和 like 类似,但使用的正则表达式进行匹配;

regexp_substr和 regexp_instr :分别对应Oracle的substr和instr ,分别进行字符拾取和定位,使用是正则表达式,更加简单灵活、强大;

regexp_replace :正则方式的替换,其中replace_str可以使用捕获组,\n形式调用

regexp_count :11g开始新增的函数,可以统计一个字符串内出现pattern的次数

字符类

Oracle未使用\d,\w,\s等形式来表示字符类,而是采取以下POSIX字符类

[::] 指定一个字符类,可以匹配该类中的任何字符

[:alpha:]可以匹配字符A-Z、a-z

[:digit:]可以匹配数字0-9

[:alphanum:]可以匹配字符0-9、A-Z、a-z

[:lower:]可以匹配小写字母a-z

[:upper:]可以匹配大写字母A-Z

[:space:]可以匹配所有的空字符

[:blank:]可以匹配空格或tab键

[:graph:]可以匹配非空字符

[:print:]与[:graph:]类似,不同之处在于[:print:]包括空格字符

[:punct:]可以匹配标点符号.,””等等

[:xdigit:]可以匹配十六进制数字0-9、A-F、a-f

应用举例:

regexp_substr

SELECT REGEXP_SUBSTR('http://www.abc_123.com/11/1.html?AD_SOURE=M2017-12-99-11-218','M201[5-9](-[0-9]+){3,4}') AD_SOURE

FROM DUAL;

SELECT REGEXP_SUBSTR('http://www.abc_123.com/11/1.html?AD_SOURE=M2017-12-99-11-218','M201[5-9](-[0-9]+){3,4}','1','1','i') AD_SOURE

FROM DUAL;

SELECT REGEXP_SUBSTR('http://www.abc_123.com/11/1.html?AD_SOURE=m2017-12-99-11-218','M201[5-9](-[[:digit:]]+){3,4}','1','1','i') AD_SOURE

FROM DUAL;

-----

M2017-12-99-11-218

M2017-12-99-11-218

m2017-12-99-11-218

regexp_replace

SELECT REGEXP_REPLACE('13800054321','([[:digit:]]{3})([[:digit:]]{5})([[:digit:]]{3})','\1*****\3') 隐藏手机号

FROM DUAL;

-------

138*****321

SELECT REGEXP_REPLACE('http://www.abc_123.com/11/1.html?AD_SOURE=M2017-12-99-11',

'http://([[:alnum:]_\.]+)/.*',

'\1')

FROM DUAL;

-------

www.abc_123.com

SELECT REGEXP_REPLACE('正序:aa-bb-cc', '正序:(.+)-(.+)-(.+)', '逆序:\3-\2-\1') FROM DUAL;

-------

逆序:cc-bb-aa

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐