oracle的正则表达式(regular expression)

2023-09-21 11:21:18

当前,正则表达式已经在很多软件中得到广泛的应用,包括Linux, Unix,HP等操作系统,PHP,C#,Java等开发环境,ORACLE则在10G中推出了自己的正则表达式。

Oracle 10g正则表达式提高了SQL灵活性,有效的解决了数据有效性, 重复词的辨认, 无关的空白检测,或者分解多个正则组成的字符串等问题。

Oracle 10g支持正则表达式的四个新函数分别是:REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR、和REGEXP_REPLACE。
它们使用POSIX 正则表达式代替了老的百分号(%)和通配符(_)字符。

元字符:
'^' 匹配输入字符串的开始位置,在方括号表达式中使用,此时它表示不接受该字符集合。
'$' 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配'n' 或 'r'。
'.' 匹配除换行符 n之外的任何单字符。
'?' 匹配前面的子表达式零次或一次。
'*' 匹配前面的子表达式零次或多次。
'+' 匹配前面的子表达式一次或多次。
'( )' 标记一个子表达式的开始和结束位置。
'[]' 标记一个中括号表达式。
'{m,n}' 一个精确地出现次数范围,m=<出现次数<=n,'{m}'表示出现m次,'{m,}'表示至少出现m次。
'|' 指明两项之间的一个选择。例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的字符串。
num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。

字符簇:
[[:alpha:]] 任何字母。
[[:digit:]] 任何数字。
[[:alnum:]] 任何字母和数字。
[[:space:]] 任何白字符。
[[:upper:]] 任何大写字母。
[[:lower:]] 任何小写字母。
[[:punct:]] 任何标点符号。
[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]。

各种操作符的运算优先级:
转义符
(), (?:), (?=), [] 圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, anymetacharacter 位置和顺序
| “或”操作

实例:

--测试数据

create table test(mc varchar2(60));

insert into test values('112233445566778899');
insert into test values('22113344 5566778899');
insert into test values('33112244 5566778899');
insert into test values('44112233 5566 778899');
insert into test values('5511 2233 4466778899');
insert into test values('661122334455778899');
insert into test values('771122334455668899');
insert into test values('881122334455667799');
insert into test values('991122334455667788');
insert into test values('aabbccddee');
insert into test values('bbaaaccddee');
insert into test values('ccabbddee');
insert into test values('ddaabbccee');
insert into test values('eeaabbccdd');
insert into test values('ab123');
insert into test values('123xy');
insert into test values('007ab');
insert into test values('abcxy');
insert into test values('The final test is is is how to find duplicate words.');

commit;

一、REGEXP_LIKE
select * from test where regexp_like(mc,'^a{1,3}');
select * from test where regexp_like(mc,'a{1,3}');
select * from test where regexp_like(mc,'^a.*e$');
select * from test where regexp_like(mc,'^[[:lower:]]|[[:digit:]]');
select * from test where regexp_like(mc,'^[[:lower:]]');
Select mc FROM test Where REGEXP_LIKE(mc,'[^[:digit:]]');
Select mc FROM test Where REGEXP_LIKE(mc,'^[^[:digit:]]');
二、REGEXP_INSTR
Select REGEXP_INSTR(mc,'[[:digit:]]$') from test;
Select REGEXP_INSTR(mc,'[[:digit:]]+$') from test;
Select REGEXP_INSTR('The price is $400.','$[[:digit:]]+') FROM DUAL;
Select REGEXP_INSTR('onetwothree','[^[[:lower:]]]') FROM DUAL;
Select REGEXP_INSTR(',,,,,','[^,]*') FROM DUAL;
Select REGEXP_INSTR(',,,,,','[^,]') FROM DUAL;
三、REGEXP_SUBSTR
SELECT REGEXP_SUBSTR(mc,'[a-z]+') FROM test;
SELECT REGEXP_SUBSTR(mc,'[0-9]+') FROM test;
SELECT REGEXP_SUBSTR('aababcde','^a.*b') FROM DUAL;
四、REGEXP_REPLACE
Select REGEXP_REPLACE('Joe Smith','( ){2,}', ',') AS RX_REPLACE FROM dual;
Select REGEXP_REPLACE('aa bb cc','(.*) (.*) (.*)', '3, 2, 1') FROM dual;
更多推荐

软件工程第一次作业参考答案

题目名词解释:软件危机、软件、软件工程、软件生命周期、瀑布模型、原型模型、增量模型、喷泉模型、敏捷过程模型。答案软件危机:软件危机是指在软件开发过程中所面临的一系列问题和挑战,包括成本超支、进度延误、质量不达标等。软件:软件是一系列指令和数据的集合,通过计算机硬件来执行特定的功能。软件工程:软件工程是一门研究与开发高质

【新版】系统架构设计师 - 案例分析 - 软件工程

个人总结,仅供参考,欢迎加好友一起讨论文章目录结构化分析SA数据流图DFD数据流图平衡原则答题技巧例题1例题2面向对象的分析OOA用例图用例模型细化用例描述用例关系【包含、扩展、泛化】分析模型定义概念类确定类之间的关系类图与对象图实体类-存储信息和相关行为的类控制类-控制其它类边界类-描述外部与系统内部交互的类顺序图(

软件工程知识总结梳理

🔥🔥宏夏Coding网站,致力于为编程学习者、互联网求职者提供最需要的内容!网站内容包括求职秘籍,葵花宝典(学习笔记),资源推荐等内容。在线阅读:https://hongxiac.com🔥🔥1.软件与软件组成?软件工程常用的8个质量要素的定义?计算机科学对软件的定义:软件是在计算机系统支持下,能够完成特定功能和

20230918使用ffmpeg将mka的音频转为AAC编码以便PR2023来识别

20230918使用ffmpeg将mka的音频转为AAC编码以便PR2023来识别2023/9/1820:58ffmpeg-i1.mka-acodecaac1.mp4ffmpeg-i1.mka-vn-c:aaac2.aacffmpeg-i1.mka-vn-c:aaac2.MP4ffmpegmka转aacmp4https

安卓逆向 - EdXposed LSPosed VirtualXposed

一、引言接上篇:安卓逆向-Xposed入门教程_小馒头yy的博客-CSDN博客我们介绍了Xposed入门安装使用,但是只支持到Android8,并且安装模块需要重启。今天我们来看看Xposed的其他版本。二、各种Xposed框架对比1、Xposed只支持到安卓8,安装模块需要重启手机2、EdXposed通过面具安装,安

“微软爱写作”连词摘录

目录前言连词1引入2承接3最后4因果关系5转折关系6并列关系7递进关系8比较关系(相同点)9对照关系(不同点)10举例关系11例外关系12强调关系13条件关系14归纳总结15方位关系16目的关系17重申关系18时间关系19结果关系20依据关系21个人观点22同意观点23不同意观点24兴趣或计划25缺少兴趣前言今天突然发

常用的Spring Boot注解及其作用

SpringBoot是一个用于简化Java应用程序开发的框架,它提供了许多注解来简化开发和配置应用程序。这些注解能够帮助开发者减少重复的劳动,并提高开发效率。下面将详细介绍一些常用的SpringBoot注解及其作用。1.@SpringBootApplication注解是一个复合注解,用于标识一个主启动类。它包含了@Co

FastAPI学习-17.其它响应html,文件,视频或其它

前言通过我们返回JSON类型的接口会比较多,除了返回JSON格式,还可以响应其它格式的内容JSONResponseContent-Type会被设置成application/jsonHTMLResponseContent-Type会被设置成text/htmlPlainTextResponseContent-Type会被设

大数据-玩转数据-Flink CEP编程

一、FlinkCEPFlinkCEP(ComplexeventprocessingforFlink)是在Flink实现的复杂事件处理库。它可以让你在无界流中检测出特定的数据,有机会掌握数据中重要的那部分。是一种基于动态环境中事件流的分析技术,事件在这里通常是有意义的状态变化,通过分析事件间的关系,利用过滤、关联、聚合等

list的介绍及使用

1.list的介绍及使用1.1list的介绍1.list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2.list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。3.list与forward_list非常相似:最主要

c语言进阶部分详解(指针进阶2)

大家好!我快马加鞭接着写出指针部分part2部分。第一部分见:c语言进阶部分详解(指针进阶1)_总之就是非常唔姆的博客-CSDN博客指针初阶部分见:c语言进阶部分详解(指针初阶)_总之就是非常唔姆的博客-CSDN博客一.函数指针1.讲解与实例函数指针:在C语言中,函数指针是指向函数的指针变量。它可以像其他变量一样存储在

热文推荐