Oracle正则表达式学习

article/2025/8/13 10:33:45

目录

一、正则表达简介 

二、REGEXP_LIKE(x,'匹配项')

三、REGEXP_INSTR

四、REGEXP_SUBSTR

五、REGEXP_REPLACE


一、正则表达简介 

相关网址:

https://cloud.tencent.com/developer/article/1456428

https://www.cnblogs.com/lxl57610/p/8227599.html

https://blog.csdn.net/qiuzhi__ke/article/details/78849570

正则表达式有四个关键字:

REGEXP_LIKE    : 正则模糊匹配——%

REGEXP_INSTR   : 正则查找索引位置——数字

REGEXP_SUBSTR  : 正则截取——字符串

REGEXP_REPLACE : 正则替换——替换完成后的结果

一些常用的正则表达:

^--匹配一个字符串的开始

[^] -- ^非

$--匹配字符串的结尾

[]--用于指定一个匹配列表

+ --匹配一次或多次出现

?--匹配0次或1次

{M}  --匹配m次。

{M,}  --至少匹配m次。

{M,N}  --至少匹配m次,但不多于n次

[0-9]:匹配任意单个数字,从0到9

[a-zA-Z]:匹配任意单个字母,包括小写字母(a到z)和大写字母(A到Z)

CREATE TABLE T_STR (CONTENT VARCHAR2(1000));INSERT INTO T_STR VALUES ('ADJKSAV,AFDSA13214');
INSERT INTO T_STR VALUES ('ADJKSAV,AFDSA13214');
INSERT INTO T_STR VALUES ('SADA324,AFDS213@32A13214');
INSERT INTO T_STR VALUES ('ADJKSAV,AFDSA.,Z.,SKDF13214');
INSERT INTO T_STR VALUES ('ADJKSAV,AFDSA');
INSERT INTO T_STR VALUES ('1232143225435');
INSERT INTO T_STR VALUES ('张三,李四,王五');
INSERT INTO t_str VALUES('17823459999');
COMMIT;SELECT * FROM T_STR;

 

二、REGEXP_LIKE(x,'匹配项')

WHERE 字段 LIKE 'A_'

示例:找出 CONTENT 中包含数字的行有哪些?

select CONTENT
from T_STR
where regexp_like(CONTENT,'[0-9]+');

示例:找出 CONTENT 由纯数字组成

select *
from T_STR
where regexp_like(CONTENT,'^[0-9]+$')
-- where regexp_like(CONTENT,'^\d+$')
-- where regexp_like(CONTENT,'^[[:digit:]]+$');

示例:找出 CONTENT 由13位数字组成的有哪些?

select *
from T_STR
where regexp_like(CONTENT,'^[0-9]{13}$');

 

示例:校验输入手机号合法(11位纯数字,1开头,第二位是3/5/7/8/9)

-- REGEXP_LIKE 校验 11位纯数字 
-- REGEXP_LIKE(str,'^[0-9]{11}$')select *
from T_STR
where regexp_like(CONTENT,'^[1][35789][0-9]{9}$');

--^:表示字符串的开头。

--[1]:匹配数字1。

--[35789]:匹配数字3、5、7、8或9中的任意一个。

--[0-9]{9}:匹配任意数字0到9,重复9次。

--$:表示字符串的结尾

示例:找出 CONTENT 中 包含 字母的 有哪些

select *
from T_STR
where regexp_like(CONTENT,'[a-zA-Z]+');

三、REGEXP_INSTR

regexp_instr(在哪个字符串中,正则表达式,从哪个位置开始匹配,第几次匹配)

示例:查找ENAME中 从第一位开始 第二次出现'T'的位置

示例:查找ENAME中 从第一位开始 第二次出现 英文字母 的位置

select ENAME, regexp_instr(ENAME, '[a-zA-Z]', 1, 2) rg
from EMP;

练习:
-- 1.输出所有员工姓名是 5个 英文字母组成的,员工信息,用正则LIKE

select *
from EMP
where REGEXP_LIKE(ENAME, '^[a-zA-Z]{5}$');

2.查找所有员工 姓名 是 从第二位开始 第三次出现 英文字母的 位置。
-- 输出        姓名 + 位置

select ENAME, regexp_instr(ENAME, '[a-zA-Z]', 2, 3) loc
from EMP;

四、REGEXP_SUBSTR

语法同substr

regexp_substr(字段,正则表达式,第几个字符开始匹配正则表达式,取第几个匹配组)

REGEXP_SUBSTR(source_string,      -- 源文本pattern,            -- 正则表达式模式[position],         -- 起始位置(可选,默认1)[occurrence],       -- 匹配第几次出现的结果(可选,默认1)[match_parameter]   -- 匹配参数(可选))
  • 第一个参数是源字符串,
  • 第二个参数是正则表达式截取规则,
  • 第三个表示从第几个字符开始匹配正则表达式,
  • 第四个参数表示取第几个匹配组

示例:将 CONTENT 中'张三,李四,王五'内容 按照逗号进行分割

--从字符串中提取匹配模式的子串

select regexp_substr(CONTENT, '[^,]+', 1, 1) a,regexp_substr(CONTENT, '[^,]+', 1, 2) b,regexp_substr(CONTENT, '[^,]+', 1, 3) c
from T_STR
where CONTENT = '张三,李四,王五';

[^,]表示匹配除逗号以外的任意字符

+ 表示前面的字符(即除逗号以外的字符)出现一次或多次

参数 1(第一个 1):表示从目标字符串的第 1 个字符开始进行匹配。

参数 1(第二个 1):表示返回匹配到的第 1 个子串。如果这个参数改为 2,就会返回按逗号分割后的第二个子串(前提是存在第二个子串),以此类推。


--[^-]+:匹配除了连字符以外的任意单个字符,至少出现一次或多次。

CREATE TABLE TT(CON VARCHAR2(100));
INSERT INTO TT VALUES ('广东省-深圳市-龙岗区');
INSERT INTO TT VALUES ('广东省-广州市-天河区');
INSERT INTO TT VALUES ('内蒙古-呼和浩特-蕲春县');
COMMIT;

示例:取 TT 表中所有的市名

select regexp_substr(CON, '[^-]+', 1, 2) city_name
from TT;

示例:将姓名分列,并为每个人均摊金额

select ENAME,AMOUNT,regexp_substr(ENAME, '[^,]+', 1, 1)                      a,regexp_substr(ENAME, '[^,]+', 1, 2)                      b,regexp_substr(ENAME, '[^,]+', 1, 3)                      c,-- 人数相当于逗号的数量+1=总长度-去掉逗号的长度+1length(ENAME) - length(replace(ENAME, ',')) + 1          num,AMOUNT / length(ENAME) - length(replace(ENAME, ',')) + 1 amt
from T_WRITEOFF;

五、REGEXP_REPLACE

regexp_replace(字符串,正则表达式,替换之后的值)

select ENAME,regexp_replace(ENAME,'[^,]','Q') Q
from T_WRITEOFF;

 

regexp_replace(ENAME,'[^,]','Q')中,如果换成[^,]+,意思是:匹配除逗号 (,) 以外的任意字符的连续序列(即一个或多个非逗号字符)

结果就会变成:

因此,要注意+号的使用

示例:查找字符串 'KJSADKABxkabdksa1432mn2k3n4k2,.1#@$mnad' 中,英文字母的个数

'[^a-zA-Z]+'        将非英文的替换为空,剩下的就是英文字母

select regexp_replace('KJSADKABxkabdksa1432mn2k3n4k2,.1#@$mnad', '[^a-zA-Z]+')         a,length(regexp_replace('KJSADKABxkabdksa1432mn2k3n4k2,.1#@$mnad', '[^a-zA-Z]+')) b
from DUAL;

 

示例:查找字符串 ' 01010101011100110 '中 1 的个数

-- 总长度-非1的个数

select regexp_replace(' 01010101011100110 ', '[^1]+')         a,length(regexp_replace(' 01010101011100110 ', '[^1]+')) b
from DUAL;

练习:

1. 截取 字符串 'CEO-总监-经理-主管-小组长-基层员工'中的'小组长'

select regexp_substr('CEO-总监-经理-主管-小组长-基层员工', '[^-]+', 1, 5) a
from DUAL;

2.提取字符串 'KJASDAKzjxzzkjz212321,,.,1DA' 中,所有的小写英文字母

select regexp_replace('KJASDAKzjxzzkjz212321,,.,1DA', '[^a-z]+') a
from DUAL;


http://www.hkcw.cn/article/vdhYylMylE.shtml

相关文章

【HW系列】—溯源与定位—Windows入侵排查

文章目录 实在不会手动,打开一个杀毒软件,全盘扫描一、入侵排查思路与流程1. 常见应急响应事件分类2. 入侵排查流程图 二、Windows账户安全排查(D盾,微步沙箱)1. 正常账户 vs 黑客账户区别2. 自动账户排查3. 隐藏账户与…

【机器学习基础】机器学习入门核心:Jaccard相似度 (Jaccard Index) 和 Pearson相似度 (Pearson Correlation)

机器学习入门核心:Jaccard相似度 (Jaccard Index) 和 Pearson相似度 (Pearson Correlation) 一、算法逻辑Jaccard相似度 (Jaccard Index)**Pearson相似度 (Pearson Correlation)** 二、算法原理与数学推导1. Jaccard相…

CVE-2021-28164源码分析与漏洞复现

漏洞概述 漏洞名称:Jetty 路径解析逻辑漏洞导致 WEB-INF 敏感信息泄露 漏洞编号:CVE-2021-28164 CVSS 评分:7.5 影响版本:Jetty 9.4.37 - 9.4.38 修复版本:Jetty ≥ 9.4.39 漏洞类型:路径遍历/信息泄露 C…

微软常用运行库合集(VisualC++)2025.04.22

软件下载 【名称】:微软常用运行库合集(Visual C)2024.11.07 【大小】:76 .7MB 【语言】:简体中文 【安装环境】:Win7/Win8/Win10/Win11 【迅雷网盘下载】: 链接:https://pan.xunlei.com/s/VOCJ3CDOT6HEhQN…

CATANet:面向轻量级图像超分辨率的高效内容感知令牌聚合方法

摘要 基于Transformer的方法在图像超分辨率(SR)等底层视觉任务中展现出了令人印象深刻的性能。然而,其计算复杂度随空间分辨率呈二次方增长。一系列研究试图通过将低分辨率(LR)图像划分为局部窗口、轴向条纹或膨胀窗口…

十四、【测试执行篇】让测试跑起来:API 接口测试执行器设计与实现 (后端执行逻辑)

[TOC](【测试执行篇】让测试跑起来:API 接口测试执行器设计与实现 (后端执行逻辑)) 前言 测试执行是测试平台的核心价值所在。一个好的测试执行器需要能够: 准确解析测试用例: 正确理解用例中定义的请求参数和断言条件。可靠地发送请求&am…

Linux环境基础开发工具->make/Makefile

引入:make/Makefile是什么? 前面我们知道了vim负责编辑代码,gcc负责编译代码,而make/Makefile则负责的是自动化编译! Makefile是一个文件,make是一条指令 我们在Makefile文件中进行编辑,让哪些…

VMware Tools 手动编译安装版

OWASPBWA安装VMware tools 安装时,显示如下提示 官方安装手册参考:https://knowledge.broadcom.com/external/article?legacyId1014294 按照提示,下载linux.iso文件,并连接到虚拟机的CDROM里,状态勾选已连接&#x…

OpenFeign和Gateway集成Sentinel实现服务降级

目录 OpenFeign集成Sentinel实现fallback服务降级cloud-alibaba-payment8003(支付服务)cloud-common-api(通用模块)cloud-alibaba-order9003(订单服务)Sentinel配置流控规则测试结果 Gateway集成Sentinel实现服务降级cloud-gateway9527(网关)测试结果 总结 OpenFeign集成Sentin…

远程管理SSH服务的搭建

一、搭建SSH服务 1、关闭防火墙与SELinux # 关闭firewalld防火墙 # 临时关闭 systemctl stop firewalld # 关闭开机自启动 systemctl disable firewalld# 关闭selinux # 临时关闭 setenforce 0 # 修改配置文件 永久关闭 vim /etc/selinux/config SELINUXdisabled2、配置yum源…

Cesium快速入门到精通系列教程二

一、添加地形与添加自定义地形 在 Cesium 1.93 中添加地形可以通过配置terrainProvider实现。Cesium 支持多种地形数据源,包括 Cesium Ion 提供的全球地形、自定义地形服务以及开源地形数据。下面介绍几种常见的添加地形的方法: 使用 Cesium Ion 全球地…

基于FashionMnist数据集的自监督学习(生成式自监督学习VAE算法)

目录 一,VAE 1.1 VAE的简介 1.2 VAE的核心思想 1.3 VAE的结构 1.4 VAE的工作原理 1.5 VAE 与传统自动编码器(AE)的区别 1.6 VAE 的应用场景 二,代码逻辑分析 2.1 整体逻辑 2.2 VAE模型 2.3 训练策略与优化 2.4 自适应学…

ESP32基础知识1:项目工程建立和烧录

ESP32基础知识1:项目工程建立和烧录 一、本文内容与前置知识点1. 本文内容2. 前置知识点 二、新建工程1. 工程配置2. 依照模板建立项目 三、硬件烧录1. 硬件准备2. 烧录器和ESP32连接3. 电脑端设置4. 烧录成功演示 四、参考文献 一、本文内容与前置知识点 1. 本文内…

duilib图片属性中corner属性九宫格拉伸说明

在duilib中,图片设置里有corner属性,类似于android系统里的九宫格,对应的分区域拉伸被称为九宫格拉伸。设置corner属性后,将区域分成3x3的九个区域,如下所示: 除了4个拐角区域不拉伸,其余5个区域…

《操作系统真相还原》——进入内核

ELF 按书上的操作来,在现代操作平台编译链接默认生成elf64 格式的文件, 很显然程序头位置发生变化,因为定义elf 结构的类型中有64位,所以我们需要将编译链接出32位格式的 gcc -m32 -c -o main.o main.c ld -m elf_i386 main.o …

笔试笔记(运维)

(数据库,SQL) limit1 随机返回其中一个聚合函数不可以嵌套使用 【^】这个里面的数据任何形式组合都没有 sql常用语句顺序:from-->where-->group by-->having-->select-->order by-->limit 只要其中一个表存在匹…

医疗数理范式化:从范式迁移到认知革命的深度解析

引言 在当代医疗领域,数理思维已经从辅助工具逐渐发展成为核心决策支持系统的关键组成部分。随着数字技术的迅猛发展,医疗行业正经历着前所未有的变革,而数理思维作为这一变革的核心驱动力,正在深刻重塑医疗实践的方方面面。数理思维在医疗领域的应用,本质上是将抽象的数…

golang -- slice 底层逻辑

目录 一、前言二、结构三、创建3.1 根据 make创建3.2 通过数组创建 四、内置append追加元素4.1 追加元素4.2 是否扩容4.2.1 不扩容4.2.2 扩容 总结 一、前言 前段时间学了go语言基础,过了一遍之后还是差很多,所以又结合几篇不同资料重新学习了一下相关…

Fashion-MNIST LeNet训练

前面使用线性神经网络softmax 和 多层感知机进行图像分类,本次我们使用LeNet 卷积神经网络进行 训练,期望能捕捉到图像中的图像结构信息,提高识别精度: import torch import torchvision from torchvision import transforms f…

数据库系统概论(十)SQL 嵌套查询 超详细讲解(附带例题表格对比带你一步步掌握)

数据库系统概论(十)SQL 嵌套查询 超详细讲解(附带例题表格对比带你一步步掌握) 前言一、什么是嵌套查询?1. 基础组成:查询块2. 嵌套的两种常见位置(1)藏在 FROM 子句里(当…