oracle正则的使用

1、建表

create table person (first_name varchar2(20),last_name varchar2(20),email varchar2(40),zip varchar2(20));
insert into PERSON (first_name, last_name, email, zip)
values ('Steven', 'Chen', 'steven@hp.com', '123456');
insert into PERSON (first_name, last_name, email, zip)
values ('James', 'Li', 'jamesli@sum.com' || chr(10) || 'lijames@oracle.com', '1b3d5f');
insert into PERSON (first_name, last_name, email, zip)
values ('Tina', 'Zhang', 'chillaxzx@163.com', '2456hd');
insert into PERSON (first_name, last_name, email, zip)
values ('Tom', 'Feng', 'Tomfeng@126.com', 'a654e5');
insert into PERSON (first_name, last_name, email, zip)
values ('Jonson', 'zhao', 'Jonson@google.com', 'edjksk');
insert into PERSON (first_name, last_name, email, zip)
values ('Vines', 'Wu', 'Vines@162.com', '2djks4');
commit;
select * from person;

2、通配符

  1. ^ 行首,如果^在[]里面,表示非的意思,匹配字符串的开头位置,如果A是字符串的第一个字符,^A;非A开头的字符 ^[^A]
  2. $ 行尾,匹配字符串的末尾位置 如果B是字符串的最后一个字符,B$
  3. . 点匹配除null以外的任意单个字符
  4. * 匹配前面的字符0次或多次 ,ba*rk可以匹配 brk、bark、baark等等
  5. ? 匹配前面的字符0次或1次 , ba?rk可以匹配 bark、brk,但是不能匹配baark。
  6. + 匹配前面的字符1次或多次 ,ba+rk可以匹配 bark、baark等等,但是不能匹配brk,也就是说,最少有以一次。
  7. {m} 匹配前面的字符恰好是m次, 其中n是整数 。hob{2}it可以匹配hobbit
  8. {m,} 匹配前面的字符至少是m次 。hob{2,}it可以匹配hobbit、hobbbit等等
  9. {m,n} 匹配前面的字符至少是m次,最多是n次 。hob{2,3}it可以匹配hobbit或者hobbbit
  10. x|y 匹配“或” x|y可以匹配x或者y
  11. (pattern) 括号中pattern是一个子正则表达式,匹配指定pattern模式的一个子表达式。 如:aaa(x|y)可以匹配aaax或者aaay。
  12. [abc] 可以匹配abc中的任何单个字符, hello[abc]可以匹配helloa,hellob,helloc
  13. [a-z] 可以匹配指定范围内的任何单个字符 。hell[a-z]可以匹配hello或者hellz
  14. [: :] 指定一个字符类,可以匹配该类中的任何字符

[[:alphanum:]] 可以匹配字符0-9、A-Z、a-z 任意数字和字母类似于[0-9a-zA-Z]
[[:alpha:]] 可以匹配字符A-Z、a-z 任意字母,类似于 [a-zA-Z]
[[:blank:]] 可以匹配空格或tab键
[[:digit:]] 可以匹配数字0-9 任意数字,类似于 [0-9]
[[:graph:]] 可以匹配非空字符
[[:lower:]] 可以匹配小写字母a-z
[[:print:]] 所有的可打印字符 与[[:graph:]]类似,不同之处在于[:print:]包括空格字符
[[:punct:]] 可以匹配标点符号.,""等等
[[:space:]] 可以匹配所有的空字符(不会打印出来)
[[:upper:]] 可以匹配大写字母A-Z
[[:xdigit:]] 可以匹配十六进制数字0-9、A-F、a-f

3、正则函数

匹配参数

  • c 大小写敏感
  • i 大小写不敏感
  • n 允许可以匹配任意字符的操作符
  • m 多行模式,允许将原字符串作为多个字符串对待
  • x 拓展模式,忽略正则表达式中的空白字符

(1)regexp_like 模糊匹配

regexp_like(,匹配模式[,匹配参数])
--查询emp表中不是S开头或不是J开头的员工信息
select *
from emp
--where regexp_like(ename,'^[^SJ]');
where not regexp_like(ename,'^[SJ]');--查询名字不以S或K结尾的员工信息(在中括号中表示取反有not in 的意思,不等于中括号里所有的)
select *
from emp
--where regexp_like(ename,'[^SK]$');
where not regexp_like(ename,'[SK]$');

(2)regexp_replace 用户替换字符串中某个值

regexp_replace(str1,匹配模式[,str3[,1[,2[,匹配参数]]]]) 
--匹配参数建立数一数二都有的情况下才能写
replace(str1,str2[,str3])  把str1中的str2整体替换成str3
str1:原字符串
str3:替换成的字符    不写表示替换为空
数1:从数1位开始(不写默认为1)2:第数2次符合匹配模式的字符串,不写默认全替换(注:这里如果不写那也不能写匹配参数,不然系统会认为匹配参数就是他的数2)   
连起来是:把str1中从第数1位开始,第数2次符合匹配模式的字符串替换成str3select 'helloworld', regexp_replace('helloworld','l','*') a,regexp_replace('helloworld','l') b,regexp_replace('helloworld','ll','*') c,regexp_replace('helloworld','l','*',1,2) d,--从第一位找第二次l出现的位置regexp_replace('helloworld','l','*',4) e
from dual;--把zip列所有的数字替换成*
select zip,regexp_replace(zip,'[0-9]','*')
from person;
--把zip列第一个数字替换成?
select zip,regexp_replace(zip,'[0-9]','?',1,1)
from person;
--查询zip列所有的字母部分  (常考)
select zip,regexp_replace(zip,'[^a-zA-Z]')       
from person;
--查询zip列所有的数字部分  (常考)
select zip,regexp_replace(zip,'[^0-9]')
from person;

(3)replace_instr 使用正则表达式返回搜索模式的起点和终点(整数)

3.regexp_instr(str,匹配模式[,1[,2[,3[,匹配参数]]]]) 查找字符串位置  --返回数值
从第数1位开始找 找第数2次匹配的位置instr(str1,str2[,1[,2]])从数1开始,在str1查找str2字符第数2出现的位置
数1 --开始找的位置2 --匹配第几次出现3 --非0返回‘匹配的字符串’的最后一位位置的下一个位置,找不到返回012不写默认是13不写默认从前往后找
数3不写默认返回字符串中的第一个字符位置,
数3为非0返回字符串最末尾字符的后一位,找不到返回0--查找zip列第一个非数字的字符的位置
select  zip,regexp_instr(zip,'[^0-9]') a,regexp_instr(zip,'[^0-9]',2,1,0) b,regexp_instr(zip,'[^0-9]',2,1,4) c,--第二位找第一次出现的后一位regexp_instr(zip,'[^0-9]',1,1) d,regexp_instr(zip,'[^0-9]',5,1) e,regexp_instr(zip,'[^0-9]',5,1,7) f  
from person;--查找zip列第二次出现"字母和数字的组合"的位置(匹配字符串的第一个字符的位置)
select zip,regexp_instr(zip,'[a-zA-Z][0-9]',1,2)
from person;--查找email列'@'第一次出现的位置, '.' 第一次出现的位置, 标点符号第一次出现的位置
select email,regexp_instr(email,'@'),regexp_instr(email,'\.',1,1,0),regexp_instr(email,'[:.:]',1,1,0),regexp_instr(email,'[[:punct:]]')
from person;

(4)replace_substr 使用正则表达式返回指定返回串的起点和终点

regexp_substr(str,匹配模式[,1[,2[,匹配参数]]]) 截取字符串substr(str,1[,2]) 从str中的第数1为截取数2位长度的字符    数1 从第几位开始找 
数2 第几次匹配
从数1位开始找 截取第数2次匹配的字符串
数12不写默认是1--截取zip列第一个"数字+字母"的组合
select zip,regexp_substr(zip,'[0-9][a-z]',1,1,'i') a,regexp_substr(zip,'[0-9][a-zA-Z]')
from  person; --截取zip列第一个连续的字母串
select  zip,  regexp_substr(zip,'[a-zA-Z][a-zA-Z]+',1,1),regexp_substr(zip,'[a-zA-Z]{2,}',1,1),regexp_substr(zip,'[a-z]{2,}',1,1,'i')
from  person;
--截取'i love http://www.52oracle.com'第一次出现o开头e结尾中间任意四个字符的字符串
select 'i love http://www.52oracle.com',regexp_substr('i love http://www.52oracle.com','o....e')
from dual;

(5)replace_count 统计符合条件的字符出现的次数

regexp_count(source_char, pattern , position , match_param)
source:需要用来进行分析的字符串
pattern:字符(可以是正常字母数字等 a,1 等,也可以是正则表达式 /d /w  [a-z]等),整个函数的作用就是返回pattern在source中出现的次数值。
position:从字符串的那个位置开始分析,可以省略,默认值是1
match_param:匹配参数
匹配参数
‘i’ 用于不区分大小写的匹配
‘c’ 用于区分大小写的匹配
‘n’ 允许句点(.)作为通配符去匹配换行符。如果省略该参数,则句点将不匹配换行符
‘m’ 将源串视为多行。即Oracle 将^和$分别看作源串中任意位置任何行的开始和结束,而不是仅仅看作整个源串的开始或			  结束。如果省略该参数,则Oracle将源串看作一行。
‘x’ 忽略空格字符。默认情况下,空格字符与自身相匹配。select regexp_count('hello-world','o') from dual

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/13576.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP+ACCESS基于B2C电子商务网站设计

摘 要 运用ASP技术结合了Access数据库原理,基于B/S模式我们开发了一个网上购物系统。在我们的系统中,顾客可以很方便的注册成为会员,对商品进行浏览检索,查看商品的详细资料,然后根据各人的喜好购买心仪的商品。系统…

CCF20220901——如此编码

CCF20220901——如此编码 代码如下&#xff1a; #include<bits/stdc.h> using namespace std; int main() {int n,m,cnt1,a[1000],c[1000]{1};cin>>n>>m;for(int i1;i<n;i){cin>>a[i];cnt*a[i];c[i]cnt;}int b[1000]{0};for(int i1;i<n;i)b[i](…

JPHS-JMIR Public Health and Surveillance

文章目录 一、期刊简介二、征稿信息三、期刊表现四、投稿须知五、投稿咨询 一、期刊简介 JMIR Public Health and Surveillance是一本多学科期刊&#xff0c;专注于公共卫生创新与技术的交叉领域&#xff0c;包括公共卫生信息学、监测&#xff08;监测系统和快速报告&#xff…

CCF20220601——归一化处理

CCF20220601——归一化处理 代码如下&#xff1a; #include<bits/stdc.h> using namespace std; int main() {int n,a[1000],sum0;scanf("%d",&n);for(int i1;i<n;i){scanf("%d",&a[i]);suma[i];}double aver1.0,b0.0,d1.0;aversum/(n*1…

Java基础(三)- 多线程、网络通信、单元测试、反射、注解、动态代理

多线程基础 线程&#xff1a;一个程序内部的一条执行流程&#xff0c;只有一条执行流程就是单线程 java.lang.Thread代表线程 主线程退出&#xff0c;子线程存在&#xff0c;进程不会退出 可以使用jconsole查看 创建线程 有多个方法可以创建线程 继承Thread类 优点&#x…

【学习】实验室服务器常用的Linux指令。

1. 下载GitHub代码。 使用代码&#xff1a; git clone https://github.com/Turoad/CLRNet.git2. 压缩 / 解压。 打包压缩 是日常工作中备份文件的一种方式 在不同操作系统中&#xff0c;常用的打包压缩方式是不同的选项 含义 Windows 常用 rarMac 常用 zipLinux 常用 tar.gz…

学硕都考11408的211院校!河北工业大学计算机考研考情分析!

河北工业大学&#xff08;Hebei University of Technology&#xff09;&#xff0c;简称河北工大&#xff0c;坐落于天津市&#xff0c;由河北省人民政府、天津市人民政府与中华人民共和国教育部共建&#xff0c; 隶属于河北省&#xff0c;是国家“双一流”建设高校、国家“211…

自动化测试在软件开发生命周期中如何提高代码质量?

自动化测试是一种在软件开发生命周期中使用软件工具来执行测试的方法&#xff0c;它可以大大提高代码质量&#xff0c;减少开发过程中的错误和缺陷。本文将从零开始&#xff0c;详细且规范地介绍如何使用自动化测试来提高代码质量。 第一步&#xff1a;明确测试目标 在开始自…

webgl入门-绘制三角形

绘制三角形 前言 三角形是一个最简单、最稳定的面&#xff0c;webgl 中的三维模型都是由三角面组成的。咱们这一篇就说一下三角形的绘制方法。 课堂目标 理解多点绘图原理。可以绘制三角形&#xff0c;并将其组合成多边形。 知识点 缓冲区对象点、线、面图形 第一章 web…

Python高克勒-曼宁-斯特里克勒公式计算一维流量

&#x1f4dc;曼宁公式-用例 &#x1f4dc;Python流体数据统计模型和浅水渗流平流模型模拟 | &#x1f4dc;Python蒸发散物理问题(微积分-线性代数-拉普拉斯和傅立叶变换) ✒️Python计算一维流量 高克勒-曼宁-斯特里克勒公式公式基于一维&#xff08;横截面平均&#xff09…

iPhone实况照片从Windows资源管理器复制的JPG+MOV无法正常还原到iPhone

背景&#xff1a; 之前使用的iPhone 15 Pro&#xff0c;使用的Windows资源管理器当中复制导出的实况照片&#xff0c;复制出来的格式例如IMG_0001.JPG, IMG_0001.MOV。之后手机就卖掉了。现在使用的iPhone 14 Pro Max&#xff0c;想要导回之前备份的实况照片。尝试使用爱思助手…

Java18新特性

Java 18引入了若干新特性&#xff0c;以增强语言的功能性和性能。具体如下&#xff1a; 服务提供者接口&#xff08;Service Provider Interfaces, SPI&#xff09;&#xff1a;允许开发者为Java模块系统定义服务加载机制&#xff0c;从而能够更灵活地发现和加载服务实现。简单…

supOS NEO科技普惠!永久免费!亿元补贴

数字化转型正在全球蓬勃发展&#xff0c;工业操作系统进入大规模推广期&#xff01; 如果您正在被预算不足、技术团队不强、数字化投入产出比等问题困扰&#xff0c;supOS NEO是您最好的选择。 “让supOS走进万千工厂、千行百业&#xff01;让全世界每个工厂都能用得上supOS&am…

MM模块学习三 (创建采购申请)

采购信息记录比较特殊既是主数据又是货源 注&#xff1a;发票校验是指把供应商提供的发票做到系统里面产生一张应付凭证。 1.决定采购需求 采购需求可以手工创建&#xff08;ME51N&#xff09;&#xff0c;也可以自动产生&#xff08;比如&#xff1a;MRP&#xff0c;以及比如…

Java——内部类

1.什么是内部类 在一个类的里面再定义一个类&#xff0c;新定义的这个类就是内部类 举例&#xff1a;在Outer类的里面定义一个Inter类 class Outer{class Inter{} } 在这里Outer叫外部类&#xff0c;Inter叫内部类 内部类的应用场景 定义一个汽车类&#xff1a; 属性&#xf…

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!

这段时间一直在搞文件上传相关的知识&#xff0c;正好把ctf的题目做做写写给自字做个总结&#xff01; 不过有一个确定就是所有的测试全部是黑盒测试&#xff0c;无法从代码层面和大家解释&#xff0c;我找个时间把upload-labs靶场做一做给大家讲讲白盒的代码审计 一、实验准…

2024-5-23 石群电路-14

2024-5-23&#xff0c;星期四&#xff0c;22:20&#xff0c;天气&#xff1a;晴&#xff0c;心情&#xff1a;晴。今天没有什么重要的事情发生&#xff0c;心情一如既往的平静&#xff0c;距离返校假期还有两天~~~。 今天观看了石群老师电路基础课程的第23/24个视频&#xff0…

Flutter 中的 AnimatedThere 小部件:全面指南

Flutter 中的 AnimatedThere 小部件&#xff1a;全面指南 在Flutter中&#xff0c;动画是增强用户体验的强大工具。虽然Flutter没有一个名为AnimatedThere的官方小部件&#xff0c;但我们可以根据常见的动画模式来构建一个类似的自定义动画效果。本文将指导您如何使用Flutter的…

Python 安装 ONNX Runtime (ORT)

1. Python 安装 ONNX Runtime 安装cpu版的 onnx runtime&#xff1a; pip install onnxruntime 安装gpu版的 onnx runtime&#xff08;cuda 11.x&#xff09;&#xff1a;(默认安装适用于cuda 11.8 的onnx runtime) pip install onnxruntime-gpu 安装gpu版的 onnx runtime…

真实案例分享,终端pc直接telnet不到出口路由器。

1、背景信息 我终端pc的网卡地址获取的网关是在核心交换机上&#xff0c;在核心交换机上telnet出口路由器可以实现。 所有终端网段都不能telnet出口路由器&#xff0c;客户希望能用最小的影响方式进行解决。 2、现有配置信息 终端的无线和有线分别在两个网段中&#xff0c;…