文章目录

  • 1 概述
  • 2 匹配规则
  • 3 正则函数
    • 3.1 regexp_substr()
    • 3.2 regexp_instr()
    • 3.3 regexp_replace()
    • 3.4 regexp_like()

1 概述

1. 作用:处理字符时,很强大2. 分类:与下列相似,但功能更加强大('支持正则表达式')(1) regexp_like   : 同 like 功能相似(模糊 '匹配')(2) regexp_instr  : 同 instr 功能相似(返回字符所在 '下标')(3) regexp_substr : 同 substr 功能相似('截取' 字符串)(4) regexp_replace: 同 replace 功能相似( '替换' 字符串)-- 使用了 '正则表达式' 替代了老的 '百分比 %' 和 '通配符 _'-- 上述 四个 函数,正则用法相似,知晓一个,其它皆可参考

2 匹配规则

主要的类型如下:

分组 元字符 描述
特殊的 \ 转义字符。“\n”:换行,"\\n":文本 ‘\n’
. 匹配除转义字符外的 任何单字符
定位元字符 ^ 使表达式定位至一行的 开头
$ 使表达式定位至一行的 末尾
量词或重复操作符 * 匹配 0 次或多次(任意次数)
? 匹配 0 次或 1 次(最多 1 次)
+ 匹配 1 次或多次(至少 1 次)
{m} 正好 匹配 m 次
{m, } 至少 匹配 m 次
{m, n} 匹配 m 到 n 次
表达式的替换和分组 | 替换,通常和分组操作符 () 一起使用
() 分组,并且 的关系
[char] 字符列表,或者 的关系
预定义的 posix 字符类 [:alpah:] 任何字母
[:lower:] 任何小写字母
[:upper:] 任何大写字母
[:digit:] 任何数字,相当于 [0-9]
[:xdigit:] 任何 16 进制的数字,相当于 [0-9a-fA-F]
[:alnum:] 任何字符或数字字符
[:space:] 空白字符,如:回车符,换行符、竖直制表符和换页符
[:punct:] 任何标点符号

示例:此案例来源于网络,略作修改,挺适合参考的

1. 查询 value 中以 1 开头 60 结尾的记录并且长度是 7 位
select * from table_name where value like '1____60'; -- 4 个 _
select * from table_name where regexp_like(value, '1....60');2. 查询 value 中以 1 开头 60 结尾的记录并且长度是 7 位且全部是数字的记录此时,用 like 就不是很好实现了
select * from table_name where regexp_like(value, '^1[0-9]{4}60$');
select * from table_name where regexp_like(value, '^1[[:digit:]]{4}60$');3. 查询 value 中不包含任何数字的记录
select * from table_name where regexp_like(value, '^[^[:digit:]]+$'); -- [] 内的 ^ 表示 '非'4. 查询 value 中不是纯数字的记录
select * from table_name where not regexp_like(value, '^[[:digit:]]+$');5. 查询以 12 或 1b 开头的记录,区分大小写
select * from table_name where regexp_like(value, '^(12)|^(1b)');
select * from table_name where regexp_like(value, '^1[2b]');6. 查询以 12 或 1b 开头的记录,不区分大小写
select * from table_name where regexp_like(value, '^1[2b]', 'i');7. 查询所有均为 小写字母 或 数字的记录
select * from table_name where regexp_like(value, '^([a-z]+|[0-9]+)$');8. 查询包含 空白 的记录
select * from table_name where regexp_like(value, '[[:space:]]');9. 查询包含 标点符号 的记录
select * from table_name where regexp_like(value, '[[:punct:]]');

3 正则函数

  • 扩展:Oracle 官方文档 - regexp_substr

3.1 regexp_substr()


参数解释:

srcstr        : 源字符串 -- source string
pattern      : 正则表达式
position     : 起始位置,默认 1
occurrence   : 第几次出现,默认 1(匹配成功的次数,依次递增)
modifier     : 模式('i': 不区分大小写,'c': 区分大小写。 默认 'c')
subexpression: 含有子表达式 0-9, 默认 0:不含子表达式,1:第一个子表达式,以此类推

例1:

select regexp_substr('abc,CBA121ABC,cba', ',[^,]+,') rs1, -- ,CBA121ABC,regexp_substr('1234567890', '(123)(4(56)(78))', 1, 1, 'i', 1) rs2 -- 123from dual;

例2:拆分邮箱

with temp_email as (select 1 user_no, 'a1@qq.com' email from dual union allselect 2 user_no, 'bb2@sina.com' email from dual union allselect 3 user_no, 'ccc3@aliyun.com' email from dual
)
select t.user_no 用户编号,regexp_substr(t.email,'[[:alnum:]]+') 用户名,regexp_substr(t.email, '\@[[:alnum:]]+\.[[:alnum:]]+') 邮箱后缀-- 两者等同-- regexp_substr(t.email,'[a-zA-Z0-9]+') 用户名2,-- regexp_substr(t.email, '\@[a-zA-Z0-9]+\.[a-zA-Z0-9]+') 邮箱后缀2from temp_email t;

测试结果:

用户编号 用户名 邮箱后缀
1       a1      @qq.com
2       bb2     @sina.com
3       ccc3    @aliyun.com

例3:匹配固定电话号码和手机号码

--*************************************************************
-- 固定电话格式:0开头 + 2到3位任意数字 + '-' + 6到7位任意数字
-- 手机号码格式:1开头 + 10位任意数字(11位)
--*************************************************************
with temp_phone as (select 1 user_no, '0755-11112222' phone_no from dual union allselect 2 user_no, '055-33334444'  phone_no from dual union allselect 3 user_no, '0755 55556666' phone_no from dual union allselect 4 user_no, 'AE86-77778888' phone_no from dual union allselect 5 user_no, '0755-888999'   phone_no from dual union allselect 6 user_no, '15866668888'   phone_no from dual union allselect 7 user_no, '015866668888'  phone_no from dual
)
select t.user_no 用户编号,t.phone_no 联系方式,regexp_substr(t.phone_no,'^0[0-9]{2,3}-[0-9]{6,7}') 固定电话,regexp_substr(t.phone_no,'^1[0-9]{10}') 手机号码from temp_phone t;

测试结果:

3.2 regexp_instr()

参数解释:

srcstr        : 源字符串 -- source string
pattern      : 正则表达式
position     : 起始位置,默认 1
occurrence   : 第几次出现,默认 1(匹配成功的次数,依次递增)
returnparam  : 返回参数对应的下标(0:第一个位置的下标,非0:最后一个位置的下标)
modifier     : 模式('i': 不区分大小写,'c': 区分大小写。 默认 'c')
subexpression: 含有子表达式 0-9, 默认 0:不含子表达式,1:第一个子表达式,以此类推

示例:

select regexp_instr('1,23,456,7890', '[0-9]+', 1, 3) 匹配到的第一个字符下标, -- 6regexp_instr('1,23,456,7890', '[0-9]+', 1, 3, 1) 最后一个字符后一位的下标, -- 9regexp_instr('1234567890', '(123)(4)(56)(78)', 1, 1, 0, 'i', 4) 匹配到的第四个子表达式 -- 7from dual;

查询结果:

匹配到的第一个字符下标  最后一个字符后一位的下标    匹配到的第四个子表达式
6                       9                       7

3.3 regexp_replace()

示例:

with temp_strings as (   select 'abc123' str from dual union allselect '123abc' str from dual union allselect 'a1b2c3' str from dual
)
select t.str 源字符串,regexp_replace(t.str, '[0-9]', '', 1) 无数字字符串from temp_strings t;

查询结果:

 源字符串    无数字字符串
1   abc123  abc
2   123abc  abc
3   a1b2c3  abc

3.4 regexp_like()

示例:

with temp_strings as (   select 'abc123' str from dual union allselect '12abcd' str from dual union allselect 'a1b2c3' str from dual
)
select t.str 连续的三个数字字符from temp_strings twhere regexp_like(t.str, '[0-9]{3}');

查询结果:

连续的三个数字字符
abc123

Oracle 正则表达式详解(regexp_substr、regexp_instr、regexp_replace、regexp_like)相关推荐

  1. Oracle 错误代码详解

    Oracle 错误代码详解及解决方式–ORA ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常. ORA-00017: 请求会话以设置跟踪事 ...

  2. Oracle ASM 详解 收藏

    Oracle ASM 详解 ASM:Automatic Storage Management, 是Oracle 主推的一种面向Oracle的存储解决方案, ASM 和 RDBMS 非常相似,ASM 也 ...

  3. JavaScript正则表达式详解(一)正则表达式入门

    JavaScript正则表达式是很多JavaScript开发人员比较头疼的事情,也很多人不愿意学习,只是必要的时候上网查一下就可以啦~本文中详细的把JavaScript正则表达式的用法进行了列表,希望 ...

  4. python面向对象编程的三大特性_Python面向对象总结及类与正则表达式详解

    Python3 面向对象 -------------------------------------------------------------------------------- 一丶面向对象 ...

  5. 菜鸟教程python正则表达式_python 正则表达式详解

    python 正则表达式详解 1. 正则表达式模式 模式描述 ^ 匹配字符串的开头 $ 匹配字符串的末尾. . 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字 ...

  6. oracle分区表编程,Oracle分区表详解

    当前位置:我的异常网» 编程 » Oracle分区表详解 Oracle分区表详解 www.myexceptions.net  网友分享于:2013-10-28  浏览:25次 Oracle分区表详解 ...

  7. oracle有哪两种内存结构,Oracle体系结构详解(物理构造,内存结构和逻辑结构)...

    当前位置:我的异常网» 数据库 » Oracle体系结构详解(物理构造,内存结构和逻辑结构 Oracle体系结构详解(物理构造,内存结构和逻辑结构) www.myexceptions.net  网友分 ...

  8. JS正则表达式详解2

    JS的正则表达式详解 //校验是否全由数字组成 代码 function isDigit(s) { var patrn=/^[0-9]{1,20}$/; if (!patrn.exec(s)) retu ...

  9. linux下grep文件内容搜索工具及基本正则表达式详解

    linux下grep文件内容搜索工具及基本正则表达式详解 grep命令: 根据模式(文本字符和基本正则表达式的元字符组合而成之匹配条件)搜索文本, 并将符合模式的文本行显示出来. 格式:grep [选 ...

最新文章

  1. html脚本语言居中,web前端:CSS--几种常用的水平垂直居中对齐方法
  2. python好学吗mooc中文网-2020年大学mooc用Python玩转数据作业答案
  3. leetcode C++ 25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
  4. Java中重写equals()方法时注意点
  5. JButton 做图片框
  6. 【VMCloud云平台】SCCM(五)创建第一个集合
  7. 阅读【现代网络技术 SDN/NFV/QOE 物联网和云计算】 第一章
  8. php3.2.3 升级,thinkphp3.2.3 升级到3.2.4时出错问题
  9. 媒智科技--深度学习算法Python后台开发--热招中~
  10. yolo算法的优缺点分析_YOLO算法详细解析(一)
  11. 栈和堆(Stack Heap)
  12. ItemsControl Grouping分组
  13. python自回归模型_21向量自回归模型
  14. 2019 vs 查看类图结构_在建筑网站上使用单页设计还是多页设计哪个更好_学云网...
  15. 百度AI之图像识别SDK:车牌识别
  16. IT江湖之怎样成为IT界的西门吹雪和独孤求败
  17. ABAP 语法备忘 刘欣
  18. N 个Android 视频教程免费下载
  19. 敏捷项目管理敏捷工作之冲刺计划
  20. 通达信插件获取并存储通达信商品指数的实时数据

热门文章

  1. 解决“Warning: require_once() 的几个方法
  2. 有多少域名被漏掉了?
  3. 12306网上购票进行身份核验的步骤
  4. show函数的作用是什么python_matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)...
  5. MODIS冰雪数据批量下载
  6. 【北京迅为】瑞芯微系列RK3399六核服务器级开发板接口介绍
  7. python找出字符串中的最长回文串子序列
  8. 【卷影副本】文件属性“以前的版本”中无法看到历史文件的解决方案
  9. 拓嘉启远电商:拼多多如何完美避开历史最低价
  10. 解决Android Gradle plugin requires Java 11 to run. You are currently using Java