1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > oracle 汉字正则表达式 在Oracle中使用正则表达式

oracle 汉字正则表达式 在Oracle中使用正则表达式

时间:2021-03-22 07:49:02

相关推荐

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字符类

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

[: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('/11/1.html?AD_SOURE=M-12-99-11-218','M201[5-9](-[0-9]+){3,4}') AD_SOURE

FROM DUAL;

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

FROM DUAL;

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

FROM DUAL;

-----

M-12-99-11-218

M-12-99-11-218

m-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('/11/1.html?AD_SOURE=M-12-99-11',

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

'\1')

FROM DUAL;

-------

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

-------

逆序:cc-bb-aa

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。