在Oracle数据库中,同样是有正则表达式的匹配支持的,主要的函数有
- REGEXP_LIKE —— 与 like 的直接模糊匹配类似;
- REGEXP_INSTR —— 与 INSTR 的功能类似;
- REGEXP_SUBSTR —— 与SUBSTR的功能相似;
- REGEXP_REPLACE —— 与REPLACE的功能相似;
- REGEXP_COUNT —— 与count的功能类似;
一、REGEXP_LIKE 正则匹配
Tips:此正则匹配规则函数只能在 where 子句中使用,不能在 select 子句中使用。
- 语法格式
REGEXP_LIKE
(
source_string,
pattern
[,match_parameter]
)
- 参数说明:
- source_string : 需要进行匹配的源字符串,或者数据列;
- pattern : 正则匹配规则;
- match_parameter :【可选】匹配模式;
- 匹配模式:
- i —— 大小写不敏感,即不区分大小写;
- c —— 大小写敏感,即区分大小写;
- n —— 允许句点(.)作为通配符去匹配换行符。如果省略该参数,则句点将不匹配换行符;
- m —— 将源串视为多行。如果省略该参数,则Oracle将源串看作一行。即Oracle 将^和$分别看作源串中任意位置任何行的开始和结束,而不是仅仅看作整个源串的开始或结束;
- x —— 忽略空格字符。默认情况下,空格字符与自身相匹配。
- 示例:
SELECT mc FROM cux.test t where REGEXP_LIKE(t.mc,'^a{1,3}');
二、REGEXP_INSTR正则匹配
- 语法格式
SELECT REGEXP_INSTR
(
source_string,
pattern
[,position]
[,occurrence]
[,returnparam]
[,match_parameter]
[,subexpression]
)
FROM DUAL;
- 参数说明
- source_string : 源字符串;
- pattern : 正则表达式;
- position : 【可选】起始位置,默认 1;
- occurrence : 【可选】第几次出现,默认 1(匹配成功的次数,依次递增);
- returnparam : 【可选】返回参数对应的下标(0:第一个位置的下标,非0:最后一个位置的下标);
- match_parameter : 【可选】模式('i': 不区分大小写,'c': 区分大小写。 默认 'c');
- subexpression: 【可选】含有子表达式 0-9, 默认 0:不含子表达式,1:第一个子表达式,以此类推;
- 示例
select regexp_instr('1,23,456,7890', '[0-9]+', 1, 3) 第一个字符下标,
regexp_instr('1,23,456,7890', '[0-9]+', 1, 3, 1) 最后一个字符后一位的下标,
regexp_instr('1234567890', '(123)(4)(56)(78)', 1, 1, 0, 'i', 4) 匹配到的第四个子表达式
from dual;
三、REGEXP_SUBSTR正则匹配
- 语法格式
SELECT REGEXP_SUBSTR
(
source_string,
pattern
[,position]
[,occurrence]
[,match_parameter]
[,subexpression]
)
FROM DUAL;
- 参数说明
- source_string : 源字符串;
- pattern : 正则表达式
- position : 【可选】起始位置,默认 1
- occurrence : 【可选】第几次出现,默认 1(匹配成功的次数,依次递增)
- match_parameter : 【可选】模式('i': 不区分大小写,'c': 区分大小写。 默认 'c')
- subexpression: 【可选】含有子表达式 0-9, 默认 0:不含子表达式,1:第一个子表达式,以此类推
- 示例
select regexp_substr('abc,CBA121ABC,cba', ',[^,]+,') rs1, -- ,CBA121ABC,
regexp_substr('1234567890', '(123)(4(56)(78))', 1, 1, 'i', 1) rs2 -- 123
from dual;
四、REGEXP_REPLACE正则匹配
- 语法格式
SELECT REGEXP_REPLACE
(
source_string,
pattern
[,replacestr]
[,position]
[,occurrence]
[,match_parameter]
)
FROM DUAL;
- 参数说明
- source_string : 源字符串;
- pattern : 正则表达式;
- replacestr : 【可选】用于替换的目标字符串,默认为空;
- position : 【可选】开始搜索的起始位置;
- occurrence : 【可选】第几次出现,默认 1(匹配成功的次数,依次递增)
- match_parameter : 【可选】模式('i': 不区分大小写,'c': 区分大小写。 默认 'c')
- 示例
with temp_strings as
(select 'abc123' str from dual
union all
select '123abc' str from dual
union all
select 'a1b2c3' str from dual
)
select t.str, regexp_replace(t.str, '[0-9]', '') from temp_strings t;
五、REGEXP_COUNT正则匹配
REGEXP_COUNT 返回pattern 在source_char 串中出现的次数。如果未找到匹配,则函数返回0。position 变量告诉Oracle 在源串的什么位置开始搜索。在开始位置之后每出现一次模式,都会使计数结果增加1。
- 语法格式
SELECT REGEXP_COUNT
(
srcstr,
pattern
[,position]
[,match_parameter]
)
FROM dual;
- 参数说明
- source_string : 源字符串;
- pattern : 正则表达式;
- position : 【可选】开始搜索的起始位置;
- match_parameter : 【可选】模式('i': 不区分大小写,'c': 区分大小写。 默认 'c')
- 示例
with temp_strings as
(select 'a11bb' str from dual
union all
select '11aabb' str from dual
union all
select '1bbaaa' str from dual)
select t.str, regexp_count(t.str, 'a') as 字符a出现的次数
from temp_strings t;
正则匹配规则
1. 特殊匹配
元字符 | 描述 |
---|---|
\ | 转义字符。“\n”:换行,"\n":文本 ‘\n’ |
. | 匹配除转义字符外的 任何单字符 |
2. 定位元字符
元字符 | 描述 |
---|---|
^ | 使表达式定位至一行的 开头 |
$ | 使表达式定位至一行的 末尾 |
3. 量词或重复操作符
元字符 | 描述 |
---|---|
* | 匹配 0 次或多次(任意次数) |
? | 匹配 0 次或 1 次(最多 1 次) |
+ | 匹配 1 次或多次(至少 1 次) |
{m} |
正好 匹配 m 次 |
{m, } |
至少 匹配 m 次 |
{m, n} |
匹配 m 到 n 次 |
4. 表达式的替换和分组
元字符 | 描述 |
---|---|
竖线 | 替换,通常和分组操作符 () 一起使用 |
() | 分组,并且 的关系 |
[char] | 字符列表,或者的关系 |
5. 预定义的 posix 字符类
元字符 | 描述 |
---|---|
[:alpah:] | 任何字母 |
[:lower:] | 任何小写字母 |
[:upper:] | 任何大写字母 |
[:digit:] | 任何数字,相当于 [0-9] |
[:xdigit:] | 任何 16 进制的数字,相当于 [0-9a-fA-F] |
[:alnum:] | 任何字符或数字字符 |
[:space:] | 空白字符,如:回车符,换行符、竖直制表符和换页符 |
[:punct:] | 任何标点符号 |
==============================================================
参考链接:
https://www.cnblogs.com/eastsea/p/4133708.html
https://www.cnblogs.com/hsz1124/p/12201005.html
http://t.csdnimg.cn/ocebB
+++========================================================+++
整理不足,后面持续补充中......
以上内容仅为个人学习记录使用。
如有转载,请附有原文出处链接。