相关文章推荐
沉着的抽屉  ·  idea生成测试用例有什么用-抖音·  1 年前    · 
含蓄的消炎药  ·  Python与机器视觉(三)图像保存_plt ...·  1 年前    · 
大气的日光灯  ·  【Java】获取此次请求URL,获取服务器根 ...·  1 年前    · 
睡不着的毛衣  ·  克里金插值详细步骤_ArcGIS反权重(ID ...·  1 年前    · 
豪情万千的台灯  ·  Redis 列表(List) | 菜鸟教程·  2 年前    · 
Code  ›  Oracle中的正则表达式(及函数)详解开发者社区
正则表达式 oracle oracle函数 oracle正则表达式
https://cloud.tencent.com/developer/article/1456428
忧郁的大象
1 年前
作者头像
一觉睡到小时候
0 篇文章

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

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 国产程序员 > Oracle中的正则表达式(及函数)详解

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

作者头像
一觉睡到小时候
发布 于 2019-07-03 18:07:25
16.4K 0
发布 于 2019-07-03 18:07:25
举报

运算符

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

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匹配的部分。

 
推荐文章
沉着的抽屉  ·  idea生成测试用例有什么用-抖音
1 年前
含蓄的消炎药  ·  Python与机器视觉(三)图像保存_plt.imsave-CSDN博客
1 年前
大气的日光灯  ·  【Java】获取此次请求URL,获取服务器根路径_若依获取请求地址-CSDN博客
1 年前
睡不着的毛衣  ·  克里金插值详细步骤_ArcGIS反权重(IDW)空间插值视频教程和文字版教程_weixin_40008969的博客-CSDN博客
1 年前
豪情万千的台灯  ·  Redis 列表(List) | 菜鸟教程
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号