在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, |
| regexp_substr('1234567890', '(123)(4(56)(78))', 1, 1, 'i', 1) rs2 |
| 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
+++========================================================+++
整理不足,后面持续补充中......
以上内容仅为个人学习记录使用。
如有转载,请附有原文出处链接。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix