oracle汉字正则表达式,在Oracle中使⽤正则表达式
正则表达式是⼀种强⼤的实⽤的字符串操作⼯具,可以⽤⼀定的字符及其组合逻辑进⾏灵活、强⼤的查、匹配、替换等字符串操作。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字符类
regexp like
[::] 指定⼀个字符类,可以匹配该类中的任何字符
[: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('www.abc_123/11/1.html?AD_SOURE=M2017-12-99-11-218','M201[5-9](-[0-9]+) {3,4}') AD_SOURE
FROM DUAL;
SELECT REGEXP_SUBSTR('www.abc_123/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('www.abc_123/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('138********','([[:digit:]]{3})([[:digit:]]{5})([[:digit:]]{3})','\1*****\3') 隐藏⼿机号
FROM DUAL;
-------
138*****321
SELECT REGEXP_REPLACE('www.abc_123/11/1.html?AD_SOURE=M2017-12-99-11',
'([[:alnum:]_\.]+)/.*',
'\1')
FROM DUAL;
-------
www.abc_123
SELECT REGEXP_REPLACE('正序:aa-bb-cc', '正序:(.+)-(.+)-(.+)', '逆序:\3-\2-\1') FROM DUAL;
-------
逆序:cc-bb-aa

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。