Oracle正则表达式学习

目录

一、正则表达简介 

二、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.pswp.cn/diannao/85345.shtml

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

相关文章

vscode 代理模式(agent mode),简单尝试一下。

1. 起因, 目的: agent mode, 很流行,名气很大。简单试试效果,确实很强。agent mode, 取代人工,确实是前进了一大步。 2. 先看效果 效果对比,左边是 普通的AI 生成的, 右边是 代理…

贝锐蒲公英工业路由器R300A海外版:支持多国4G频段,全球组网

为更好地满足全球部署和企业出海项目的多样化需求,贝锐蒲公英异地组网工业路由器R300A海外版全新上市,并已正式上架速卖通!无论是跨国分支机构协同办公,还是海外工厂设备远程运维,R300A海外版都能为企业提供灵活、高性…

自然图像数据集

目录 CIFAR-10 数据集CIFAR-100 数据集AFHQ 数据集FFHQ 数据集 CIFAR-10 数据集 简介: CIFAR-10 是一个经典的图像分类数据集,广泛用于机器学习领域的计算机视觉算法基准测试。它包含60000幅32x32的彩色图像,分为10个类,每类6000…

【AI面试秘籍】| 第25期:RAG的关键痛点及解决方案深度解析

今天我们来聊聊大模型领域一个非常火热的技术——RAG(Retrieval Augmented Generation)。RAG通过引入外部知识库,有效地缓解了大型语言模型(LLM)在处理知识密集型任务时可能出现的幻觉、知识过时等问题。然而&#xff…

精英-探索双群协同优化(Elite-Exploration Dual Swarm Cooperative Optimization, EEDSCO)

一种多群体智能优化算法,其核心思想是通过两个分工明确的群体——精英群和探索群——协同工作,平衡算法的全局探索与局部开发能力,从而提高收敛精度并避免早熟收敛。 一 核心概念 在传统优化算法(如粒子群优化、遗传算法&#xf…

Transformer相关

问题汇总 Transformer的结构自注意力机制(Self-Attention)多头自注意力前馈神经网络(Feed-Forward Network, FFN)位置编码编码器(Encoder)和解码器(Decoder)Multi-Query Attention(多查询注意力机制)Grouped-query Attention(分组查询注意力机制)FlashAttention与注…

【位运算】两整数之和(medium)

两整数之和(medium) 题⽬描述:解法(位运算):代码复杂度分析 题⽬链接: 371. 两整数之和 题⽬描述: 给你两个整数 a 和 b ,不使⽤ 运算符 和 - ,计算并返回两…

现代密码学入门 | 现代密码学核心特点介绍

在当今互联互通的世界中,数字数据在全球范围内不断流动,安全通信和数据保护的需求从未如此迫切。现代密码学作为数字防御的先锋,提供了一系列复杂的技术和算法,以保护信息免受窥探和恶意行为的侵害。 现代密码学是从其古典前身—…

Redis分布式锁深度解析与最佳实践

1 2 Redis分布式锁实现方式确实是经典问题,下面我将系统性地分析这个方案及其演进过程,并给出生产级的解决方案。 一、基础方案及其缺陷 1. 初始实现方式 SETNX lock_key unique_value # 尝试获取锁 EXPIRE lock_key 30 # 设置过期时间 …

Hive自定义函数案例(UDF、UDAF、UDTF)

目录 前提条件 背景 概念及适用场景 UDF(User-Defined Function) 概念 适用场景 UDAF(User-Defined Aggregate Function) 概念 适用场景 UDTF(User-Defined Table-Generating Function) 概念 适…

Go语言的原子操作

当我们想要对某个变量并发安全的修改,除了使用官方提供的mutex,还可以使用sync/atomic包的原子操作,它能够保证对变量的读取或修改期间不被其他的协程所影响。 Golang提供的原子操作都是非侵入式的,由标准库sync/atmoic包提供&am…

QNAP MEMOS 域名访问 SSL(Lucky)

注意:下述是通过ssh、docker-compose方式安装docker的,不是直接在container station中安装的哈!!! 一、编辑docker-compose.yml文件 用“#”号标识的,在保存文件的时候建议去掉,不然有时候会出…

C#实现远程锁屏

前言 这是一次提前下班没有锁屏进而引发的一次思考后的产物,思考的主要场景是当人离开电脑后,怎么能控制电脑锁屏,避免屏幕上的聊天记录被曝光。 首先想到通过系统的电源计划设置闲置超时时间熄屏,这可能是最接近场景的解决方案&a…

[Protobuf]常见数据类型以及使用注意事项

[Protobuf]常见数据类型以及使用注意事项 水墨不写bug 文章目录 一、基本数据类型1、字段2、字段的修饰规则 二、自定义数据类型1、message类型2、enum类型3、Any类型4、oneof类型5、map类型 三、小工具1.hexdump2.decode 四、注意事项 一、基本数据类型 protobuf 支持多种基础…

JS分支和循环

程序的执行顺序 在程序开发中&#xff0c;程序有三种不同的执行顺序 1.顺序执行 2.分支执行 3.循环执行 程序的代码块 <script>//一个代码块{var num11var num22var num3num1num2}//一个休想var info{name:"chen",age:18} 1.if分支语句&#xff08;单分支语句&…

Android 开发 Kotlin 全局大喇叭与广播机制

在 Android 开发中&#xff0c;广播机制就像一个神通广大的 “消息快递员”&#xff0c;承担着在不同组件间传递信息的重任。Kotlin 语言的简洁优雅更使其在广播机制的应用中大放异彩。今天&#xff0c;就让我们一同深入探索 Android 开发中 Kotlin 全局大喇叭与广播机制的奥秘…

rabbitmq AI复习

RabbitMq rabbitmq &#x1f9d1;‍&#x1f4bb; User 帮我复习rabbitmq相关知识&#xff0c;我是一个经验丰富的程序员 &#x1f916; Assistant 好的&#xff01;很高兴能通过这种方式帮你复习或学习 RabbitMQ 的知识。按照你说的流程&#xff0c;我们从完全零基础开始&…

计算机视觉---YOLOv5

YOLOv5理论讲解 一、YOLOv5 整体架构解析 YOLOv5 延续了 YOLO 系列的 单阶段目标检测框架&#xff0c;包含 主干网络&#xff08;Backbone&#xff09;、颈部网络&#xff08;Neck&#xff09; 和 检测头&#xff08;Head&#xff09;&#xff0c;但在结构设计上更注重 轻量化…

C++多重继承详解与实战解析

#include <iostream> using namespace std; //基类&#xff0c;父类 class ClassA { public:void displayA() {std::cout << "Displaying ClassA" << std::endl;}void testFunc(){std::cout << "testFunc ClassA" << std::e…

单细胞注释前沿:CASSIA——无参考、可解释、自动化细胞注释的大语言模型

细胞类型注释是单细胞RNA-seq分析的重要步骤&#xff0c;目前有许多注释方法。大多数注释方法都需要计算和特定领域专业知识的结合&#xff0c;而且经常产生不一致的结果&#xff0c;难以解释。大语言模型有可能在减少人工输入和提高准确性的同时扩大可访问性&#xff0c;但现有…