Oracle 正则表达式

一、Oracle 正则表达式相关函数

   (1) regexp_like :同 like 功能相似(模糊 '匹配')
   (2) regexp_instr :同 instr 功能相似(返回字符所在 '下标')
   (3) regexp_substr : 同 substr 功能相似('截取' 字符串)
   (4) regexp_replace:同 replace 功能相似( '替换' 字符串)

   使用了 '正则表达式' 替代了老的 '百分比 %' 和 '通配符 _'

WITH AA AS (
    SELECT 'ABCDEF' AS NAME FROM DUAL
    UNION ALL
    SELECT 'ABCDEFG' AS NAME FROM DUAL
)
SELECT * FROM AA WHERE NAME LIKE 'A____F'; -- 其中'_'表示单个字符,Result:ABCDEF

二、正则规则

三、正则函数

 regexp_substr():

参数解释:

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

样例:

with temp_email as (
  select 1 user_no, 'aaa@qq.com' email from dual union all
  select 2 user_no, 'bbb2@sina.com' email from dual union all
  select 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]+') 邮箱后缀2
  from temp_email t;

结果:

SELECT REGEXP_SUBSTR('34,56,-23', '[^,]+', 1, LEVEL, 'i') AS STR FROM DUAL 
CONNECT BY LEVEL <= LENGTH('34,56,-23') - LENGTH(REGEXP_REPLACE('34,56,-23', ',', '')) + 1;

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

regexp_replace():

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

 regexp_like():

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

相关推荐

  1. Oracle 数据库中使用表达式

    2024-04-12 20:50:03       37 阅读
  2. 表达式

    2024-04-12 20:50:03       64 阅读
  3. 表达式

    2024-04-12 20:50:03       73 阅读
  4. 表达式

    2024-04-12 20:50:03       74 阅读
  5. 【Python】表达式

    2024-04-12 20:50:03       48 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-12 20:50:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-12 20:50:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-12 20:50:03       87 阅读
  4. Python语言-面向对象

    2024-04-12 20:50:03       96 阅读

热门阅读

  1. 4.8作业

    4.8作业

    2024-04-12 20:50:03      47 阅读
  2. 前端小白学习Vue框架(二)

    2024-04-12 20:50:03       41 阅读
  3. qt 系列教程(3) 对话框

    2024-04-12 20:50:03       50 阅读
  4. AcWing 790. 数的三次方根

    2024-04-12 20:50:03       39 阅读
  5. 登录加载动画

    2024-04-12 20:50:03       69 阅读
  6. Sed 命令深度解析:Linux 文本处理的利刃

    2024-04-12 20:50:03       46 阅读
  7. WebKit结构简介

    2024-04-12 20:50:03       49 阅读
  8. [深度学习] 无人车避开赛道边的障碍物

    2024-04-12 20:50:03       52 阅读
  9. 商业智能-BI

    2024-04-12 20:50:03       42 阅读
  10. C++ 多态

    2024-04-12 20:50:03       32 阅读