正则表达式是功能强大且实用的字符串操作工具. 您可以使用某些字符及其组合逻辑来执行灵活,强大的搜索,匹配和替换字符串操作. 作为行业的领导者,Oracle对正则表达式提供了更完整的支持.
函数语法
REGEXP_LIKE
REGEXP_LIKE(source_str,pattern,[match_parameter])
REGEXP_SUBSTR
REGEXP_SUBSTR(source_str,pattern,[position],[occurrence],[match_parameter])
REGEXP_INSTR
REGEXP_INSTR(source_str,pattern,[position],[occurrence],[return_option],[match_parameter])
REGEXP_REPLACE
REGEXP_REPLACE(source_str,pattern,replace_str,[position],[occurrence],[match_parameter])
REGEXP_COUNT
REGEXP_COUNT(source_str,pattern正则表达式怎么使用,[position],[match_parameter])
注意: []是可选的
参数含义
source_str
输入字符串可以是列名或字符串常量或变量.
模式
正则表达式.
match_parameter
匹配选项. 值范围: i: 不区分大小写; c: 区分大小写;
n: 点. 与换行符不匹配;
m: 多行模式,使用^和$作为源字符串中任何行的开头和结尾,而不仅仅是整个源字符串的开头或结尾. 如果省略此参数,则将源字符串视为一行.
x: 扩展模式,忽略正则表达式中的空格字符.
位置
确定正则表达式匹配项中的前几个字符,默认值为1
发生
确定匹配组的数量. 默认值为1
replace_str
已替换的字符串,可以使用捕获组(\ ncall,n是第n个捕获组)
return_option
仅适用于regexp_instr正则表达式怎么使用,0: 默认值,返回图案第一个字符出现的位置,1: 图案结束后下一个字符的起始位置
regexp_like: 只能作为条件表达式放置在where后面,类似于like,但是使用正则表达式进行匹配;
regexp_substr和regexp_instr: 分别对应于Oracle的substr和instr,使用正则表达式进行字符选取和定位,更加简单,灵活,强大;
regexp_replace: 常规替换,其中replace_str可以使用捕获组,\ n表单调用
regexp_count: 自11g起新添加的函数,可以计算模式在字符串中出现的次数
字符类
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: ]可以匹配所有空字符
[: 空白: ]可以匹配空格或制表符
[: 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
请尊重作者的工作,转载时请注明出处: Notes-Qianrong的博客»在Oracle中使用正则表达式
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-247789-1.html