首页 > 数据库 >Oracle中的正则表达式(及函数)

Oracle中的正则表达式(及函数)

时间:2022-09-29 14:13:11浏览次数:52  
标签:匹配 函数 正则表达式 value REGEXP Oracle regexp where like

运算符

在介绍函数前,这里先说明一下Oracle中正则表达式运算符及其描述。
如果不知道他们有什么用,或者也不知道描述说的是什么,没关系,可以先看后面的介绍,就知道他们的含义了。
image

oracle 正则表达式 匹配

ORACLE中的支持正则表达式的函数主要有下面四个:
REGEXP_LIKE :与LIKE的功能相似

REGEXP_INSTR :与INSTR的功能相似

REGEXP_SUBSTR :与SUBSTR的功能相似

REGEXP_REPLACE :与REPLACE的功能相似

它们在用法上与Oracle SQL 函数LIKE、INSTR、SUBSTR 和REPLACE 用法相同,但是它们使用POSIX 正则表达式代替了老的百分号(%)和通配符(_)字符。

POSIX 正则表达式由标准的元字符(metacharacters)所构成:
'^' 匹配输入字符串的开始位置,在方括号表达式中使用,此时它表示不接受该字符集合。
'$' 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。
'.' 匹配除换行符之外的任何单字符。
'?' 匹配前面的子表达式零次或一次。
'+' 匹配前面的子表达式一次或多次。
'*' 匹配前面的子表达式零次或多次。
'|' 指明两项之间的一个选择。例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的字符串。
'( )' 标记一个子表达式的开始和结束位置。
'[]' 标记一个中括号表达式。
'{m,n}' 一个精确地出现次数范围,m=<出现次数<=n,'{m}'表示出现m次,'{m,}'表示至少出现m次。\num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。
字符簇:
[[:alpha:]] 任何字母。
[[:digit:]] 任何数字。
[[:alnum:]] 任何字母和数字。
[[:space:]] 任何白字符。
[[:upper:]] 任何大写字母。
[[:lower:]] 任何小写字母。
[[:punct:]] 任何标点符号。
[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]。
各种操作符的运算优先级
\转义符
(), (?:), (?=), [] 圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, anymetacharacter 位置和顺序
regexp_like

--查询value中以1开头60结束的记录并且长度是7位

select * from fzq where value like '1____60';
select * from fzq where regexp_like(value,'1....60');

--查询value中以1开头60结束的记录并且长度是7位并且全部是数字的记录。
--使用like就不是很好实现了。

select * from fzq where regexp_like(value,'1[0-9]{4}60');

-- 也可以这样实现,使用字符集。

select * from fzq where regexp_like(value,'1[[:digit:]]{4}60');

-- 查询value中不是纯数字的记录

select * from fzq where not regexp_like(value,'^[[:digit:]]+$');

-- 查询value中不包含任何数字的记录。

select * from fzq where regexp_like(value,'^[^[:digit:]]+$');

--查询以12或者1b开头的记录.不区分大小写。

select * from fzq where regexp_like(value,'^1[2b]','i');

--查询以12或者1b开头的记录.区分大小写。

select * from fzq where regexp_like(value,'^1[2B]');

-- 查询数据中包含空白的记录。

select * from fzq where regexp_like(value,'[[:space:]]');

--查询所有包含小写字母或者数字的记录。

select * from fzq where regexp_like(value,'^([a-z]+|[0-9]+)$');

--查询任何包含标点符号的记录。

select * from fzq where regexp_like(value,'[[:punct:]]');

相关函数

函数中pattern为正则表达式,最多可以包含512个字节。

REGEXP_SUBSTR

REGEXP_SUBSTR函数使用正则表达式来指定返回串的起点和终点。
语法:

regexp_substr(source_string,pattern[,position[,occurrence[,match_parameter]]])

source_string:源串,可以是常量,也可以是某个值类型为串的列。
position:从源串开始搜索的位置。默认为1。
occurrence:指定源串中的第几次出现。默认值1.
match_parameter:文本量,进一步订制搜索,取值如下:

  • 'i' 用于不区分大小写的匹配。
  • 'c' 用于区分大小写的匹配。
    * 'n' 允许将句点“.”作为通配符来匹配换行符。如果省略改参数,句点将不匹配换行符。
    * 'm' 将源串视为多行。即将“^”和“$”分别看做源串中任意位置任意行的开始和结束,而不是看作整个源串的开始或结束。如果省略该参数,源串将被看作一行来处理。
  • 如果取值不属于上述中的某个,将会报错。如果指定了多个互相矛盾的值,将使用最后一个值。如'ic'会被当做'c'处理。
REGEXP_INSTR

REGEXP_INSTR函数使用正则表达式返回搜索模式的起点和终点(整数)。如果没有发现匹配的值,将返回0。
语法:

regexp_instr(source_string,pattern[,position[,occurrence[,return_option[,match_parameter]]]])

REGEXP_INSTR函数常常会被用到where子句中。

REGEXP_LIKE

通常使用REGEXP_LIKE进行模糊匹配。
语法:

regexp_like(source_string,pattern[match_parameter])

该函数可以使用前面介绍的所有搜索功能作为REGEXP_LIKE搜索的一部分,可以是非常复杂的搜索变得简单。

REPLACE和REGEXP_REPLACE

REPLACE函数用于替换串中的某个值。
语法:

replace(char,search_string[,replace_string])

如果不指定replace_string,会将搜索到的值删除
REGEXP_REPLACE是REPLACE的增强版,支持正则表达式,扩展了一些功能。
语法:

regexp_replace(source_string,pattern[,replace_string[,position[,occurrence[,match_parameter]]]])

replace_string表示用什么来替换source_string中与pattern匹配的部分。
occurrence为非负整数,0表示所有匹配项都被替换,为正数时替换第n次匹配。

REGEXP_COUNT

REGEXP_COUNT函数返回在源串中出现的模式的次数,作为对REGEXP_INSTR函数的补充。
虽然COUNT是一个集合函数,操作的是行组,但是REGEXP_COUNT是单行函数,分别计算每一行。
语法:

regexp_count(source_char,pattern[,position[,match_param]])

REGEXP_COUNT返回pattern在source_char串中出现的次数。如果未找到匹配,函数返回0。
metch_param参数,相对于前面介绍的match_parameter参数多一个取值“x”。
'x':忽略空格字符。默认情况下,空格与自身想匹配。
metch_param如果指定了多个互相矛盾的值,将使用最后一个值。

标签:匹配,函数,正则表达式,value,REGEXP,Oracle,regexp,where,like
From: https://www.cnblogs.com/leepandar/p/16741301.html

相关文章

  • Oracle 12C R2-新特性---增强索引压缩
    高级索引压缩可以很好的应用于所有支持的索引。使用高级索引压缩创建索引可以减少所有唯一和非唯一索引的大小,并显着提高压缩率,占用更少的空间,同时仍然可以有效地访问索引。......
  • 关于自动配置Oracle安装环境的RPM包说明
    说明我们都知道如果在OracleLinux操作系统平台上在Oracle,Oracle提供了一个RPM包来自动配置操作系统相关的参数以满足OracleDB的安装要求。这样就去掉了安装Oracle最为繁琐......
  • Oracle 18c-可伸缩序列(Scalable Sequence)
    说明在18c之前的版本中对于序列的使用,存在着对同一个序列争用的情况,特别是对于RAC这种高并发的环境中争用序列情况更是容易发生。针对这种情况,Oracle退出了可伸缩序列,大大减......
  • Oracle 12C R2-新特性-新的初始化参数
    12.2中新引入的初始化参数ALLOW_GLOBAL_DBLINKSALLOW_GROUP_ACCESS_TO_SGAAPPROX_FOR_AGGREGATIONAPPROX_FOR_COUNT_DISTINCTAPPROX_FOR_PERCENTILEASM_IO_PROCESSESAUTOTAS......
  • Oracle 12C R2-新特性-监控PDB资源使用情况
    1 说明在12.2中可以通过一系列的动态性能视图来监控PDB的资源使用情况,包括:CPU,并行执行语句,I/O,内存。都通过一个视图V$RSRCPDBMETRIC和V$RSRCPDBMETRIC_HISTORY来查询,几乎......
  • Oracle 12C R2-新特性-多租户:支持本地UNDO模式
    在12.1中,所有的在一个实例中的PDB只能共享同一个UNDO表空间。在12.2中它们都有各自的undo表空间了。这种新的管理机制就叫做本地undo模式。与此同时,在之前的版本中现在就成......
  • Oracle 12C R2-新特性---实时物化视图
    文字部分基本上都是官方文档翻译过来的,不准确的地方请谅解。物化视图可用于查询重写,即使它们并不完全与基表同步,并且被认为失效。使用物化视图日志与增量计算以及陈旧的物......
  • 使用Oracle的sshUserSetup.sh脚本配置SSH互信
    不管是在Oracle的GRID安装包,还是DB安装包里都有个脚本(sshUserSetup.sh),用于配置机器之间的SSH互信。配置互信,不仅仅在安装RAC需要配置。有时候我们需要配置ssh互信的时候,用......
  • Oracle 12C R2-新特性-多租户:PDB支持不同字符集
    在12.2之前的版本中,PDB的字符集必须和root容器保持一致。很显然这样就限制了PDB的灵活性。这个限制在12.2中被取消,12.2中支持PDB的字符集可以和root容器字符集不同。1检查C......
  • 使用grafana+Prometheus监控时PromQL内置函数详解
    1、Prometheus简介Prometheus(中文名:普罗米修斯)是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB).Prometheus使用Go语言开发,是GoogleBorgMon监控系统的......