随笔 - 26,  文章 - 0,  评论 - 0,  阅读 - 5531

  在Oracle数据库中,同样是有正则表达式的匹配支持的,主要的函数有

  • REGEXP_LIKE —— 与 like 的直接模糊匹配类似;
  • REGEXP_INSTR —— 与 INSTR 的功能类似;
  • REGEXP_SUBSTR —— 与SUBSTR的功能相似;
  • REGEXP_REPLACE —— 与REPLACE的功能相似;
  • REGEXP_COUNT —— 与count的功能类似;

一、REGEXP_LIKE 正则匹配

Tips:此正则匹配规则函数只能在 where 子句中使用,不能在 select 子句中使用。

  1. 语法格式
REGEXP_LIKE
(
source_string,
pattern
[,match_parameter]
)
  1. 参数说明:
  • source_string : 需要进行匹配的源字符串,或者数据列;
  • pattern : 正则匹配规则;
  • match_parameter :【可选】匹配模式;
  1. 匹配模式:
  • i —— 大小写不敏感,即不区分大小写;
  • c —— 大小写敏感,即区分大小写;
  • n —— 允许句点(.)作为通配符去匹配换行符。如果省略该参数,则句点将不匹配换行符;
  • m —— 将源串视为多行。如果省略该参数,则Oracle将源串看作一行。即Oracle 将^和$分别看作源串中任意位置任何行的开始和结束,而不是仅仅看作整个源串的开始或结束;
  • x —— 忽略空格字符。默认情况下,空格字符与自身相匹配。
  1. 示例:
SELECT mc FROM cux.test t where REGEXP_LIKE(t.mc,'^a{1,3}');

二、REGEXP_INSTR正则匹配

  1. 语法格式
SELECT REGEXP_INSTR
(
source_string,
pattern
[,position]
[,occurrence]
[,returnparam]
[,match_parameter]
[,subexpression]
)
FROM DUAL;
  1. 参数说明
  • source_string : 源字符串;
  • pattern : 正则表达式;
  • position : 【可选】起始位置,默认 1;
  • occurrence : 【可选】第几次出现,默认 1(匹配成功的次数,依次递增);
  • returnparam : 【可选】返回参数对应的下标(0:第一个位置的下标,非0:最后一个位置的下标);
  • match_parameter : 【可选】模式('i': 不区分大小写,'c': 区分大小写。 默认 'c');
  • subexpression: 【可选】含有子表达式 0-9, 默认 0:不含子表达式,1:第一个子表达式,以此类推;
  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;

image

三、REGEXP_SUBSTR正则匹配

  1. 语法格式
SELECT REGEXP_SUBSTR
(
source_string,
pattern
[,position]
[,occurrence]
[,match_parameter]
[,subexpression]
)
FROM DUAL;
  1. 参数说明
  • source_string : 源字符串;
  • pattern : 正则表达式
  • position : 【可选】起始位置,默认 1
  • occurrence : 【可选】第几次出现,默认 1(匹配成功的次数,依次递增)
  • match_parameter : 【可选】模式('i': 不区分大小写,'c': 区分大小写。 默认 'c')
  • subexpression: 【可选】含有子表达式 0-9, 默认 0:不含子表达式,1:第一个子表达式,以此类推
  1. 示例
select regexp_substr('abc,CBA121ABC,cba', ',[^,]+,') rs1, -- ,CBA121ABC,
regexp_substr('1234567890', '(123)(4(56)(78))', 1, 1, 'i', 1) rs2 -- 123
from dual;

image

四、REGEXP_REPLACE正则匹配

  1. 语法格式
SELECT REGEXP_REPLACE
(
source_string,
pattern
[,replacestr]
[,position]
[,occurrence]
[,match_parameter]
)
FROM DUAL;
  1. 参数说明
  • source_string : 源字符串;
  • pattern : 正则表达式;
  • replacestr : 【可选】用于替换的目标字符串,默认为空;
  • position : 【可选】开始搜索的起始位置;
  • occurrence : 【可选】第几次出现,默认 1(匹配成功的次数,依次递增)
  • match_parameter : 【可选】模式('i': 不区分大小写,'c': 区分大小写。 默认 'c')
  1. 示例
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;

image

五、REGEXP_COUNT正则匹配

  REGEXP_COUNT 返回pattern 在source_char 串中出现的次数。如果未找到匹配,则函数返回0。position 变量告诉Oracle 在源串的什么位置开始搜索。在开始位置之后每出现一次模式,都会使计数结果增加1。

  1. 语法格式
SELECT REGEXP_COUNT
(
srcstr,
pattern
[,position]
[,match_parameter]
)
FROM dual;
  1. 参数说明
  • source_string : 源字符串;
  • pattern : 正则表达式;
  • position : 【可选】开始搜索的起始位置;
  • match_parameter : 【可选】模式('i': 不区分大小写,'c': 区分大小写。 默认 'c')
  1. 示例
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;

image

正则匹配规则

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

+++========================================================+++
整理不足,后面持续补充中......
以上内容仅为个人学习记录使用。
如有转载,请附有原文出处链接。

posted on   Hy旧人伤  阅读(382)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示