首页 > 数据库 >【PL/SQL】PL/SQL中的正则表达式

【PL/SQL】PL/SQL中的正则表达式

时间:2024-09-06 16:47:35浏览次数:8  
标签:匹配 正则表达式 pattern source 大小写 select SQL REGEXP PL

  在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

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

标签:匹配,正则表达式,pattern,source,大小写,select,SQL,REGEXP,PL
From: https://www.cnblogs.com/JiurenShang/p/18400552

相关文章

  • 分批查询SQL
    1.背景批量查询,如何入参数组参数过多,会导致SQL长度过长,数据库会拒绝查询2.解决方式在代码的层面上,进行分批查询,例如2000个参数,分成1000一批来进行查询,但是又会有几个问题不同类的查询,入参和出参均不同,有没有一种方式,可以兼容不同的出入参全量查询sql会去重,分批查询,不同批......
  • elementplus vue3 table表格动态合并单元格
    letcellList:any[]=[]//单元格数组letcount:number=0//计数constcomputeCell=(tableList:any[],name)=>{cellList=[]count=0for(leti=0;i<tableList.length;i++){if(i===0){//先设置第一项cellList.push(1)......
  • 利用网站获取Google Play Store中应用安装包,拒绝“所在国家/地区未上线“
    网站获取GooglePlayStore我使用了很长一段时间,GooglePlayStore上有许多应用(如游戏CallofDuty:WarzoneMobile,工具AndFTP等)不允许所在国家/地区下载 注:网站仅能获取免费的应用 网站https://apk.support/apk-downloader(链接添不进去) 使用方法上面的搜索......
  • mysql为什么不推荐uuid做主键?
    在MySQL中,不推荐使用UUID作为主键的主要原因还是性能问题,其次是可读性差和浪费存储空间。性能问题:UUID是128位的字符串,通常被表示为32个字符的十六进制数。相比自增的整数(如AUTO_INCREMENT),UUID更大,占用的存储空间也更多,这会增加索引大小,导致查询变慢,尤其是在大表中。无序......
  • PLC结构化文本(ST)——变量类型和变量属性
    PLCStructuredTextObjectOrientedProgrammingPLC结构化文本(ST)——变量类型和变量属性变量类型变量类型关键字说明外部读写内部读写VAR内部变量,程序组织单元内部的变量不允许读/写VAR_INPUT输入变量,由外部提供,在程序组织单元内部不能修改读/写读VAR......
  • element-plus 倒计时el-countdown添加背景色
    效果图: 实现方法:<el-countdown:time="countdownTime":formatter="formatter"/><divv-html="formattedTime"></div>formatter(time){constdays=Math.floor(time/1000/60/60/24......
  • linux中安装mysql
    目录1,删除centos7自带的mariadb2,下载mysql3,安装4,修改密码5,远程登录1,删除centos7自带的mariadb查看是否有mariadbrpm-qa|grepmariadb删除rpm-e--nodepsmariadb-libs-5.5.68-1.el7.x86_64再看下没有输出,删除成功2,下载mysqlMySQL::Download......
  • Ampleon BLL6H0514LS-130是一款设计精良的晶体管
    型号简介    BLL6H0514LS-130是Ampleon(安谱隆)推出的一款LDMOS功率晶体管,它拥有易于功率控制的特性,通过简单的栅极电压调节,就可以轻松地调整输出功率。此外,晶体管内部还集成了ESD保护电路,有效防止静电损坏,提高了器件的耐用性。型号规格品牌:Ampleon(安谱隆)型号:B......
  • Ampleon BLL6H1214-500是一款高效稳定的晶体管
    型号简介    BLL6H1214-500是Ampleon(安谱隆)推出的一款LDMOS功率晶体管,它能够在1.2GHz至1.4GHz的频率范围内提供高达500W的输出功率,并且具有高效率、宽带操作和鲁棒性等特点。能够承受10:1的VSWR负载失配,即使在恶劣的条件下也能保持稳定的工作。型号规......
  • Ampleon BLS6G2731-120是一款防静电的晶体管
    型号简介    BLS6G2731-120是Ampleon(安谱隆)推出的一款LDMOS功率晶体管,这款晶体管还拥有集成静电放电(ESD)保护,这有助于保护其免受损坏,并延长其使用寿命。此外,它还具有高可靠性和良好的热特性,这意味着它可以在恶劣的环境条件下稳定工作。型号规格品牌:Ampleon(安......