Oracle 正则表达式函数 REGEXP

您所在的位置:网站首页 regex_like函数性能优化 Oracle 正则表达式函数 REGEXP

Oracle 正则表达式函数 REGEXP

2023-12-11 18:02| 来源: 网络整理| 查看: 265

Oracle中的支持正则表达式的函数主要有以下五个:

1、REGEXP_LIKE :与LIKE的功能相似,可以支持按正则表达式与文本进行匹配 2、REGEXP_INSTR :返回指定字符串中与正则表达式匹配部分第一次出现的位置 3、REGEXP_COUNT :返回指定字符串中与正则表达式匹配部分出现的次数 4、REGEXP_SUBSTR :截取指定字符串中与正则表达式匹配的部分 5、REGEXP_REPLACE :替换指定字符串中与正则表达式匹配的部分

一、REGEXP_LIKE() REGEXP_LIKE(STRING, REGEX, MODIFIER)

STRING:需要进行正则处理的字符串 REGEX:进行匹配的正则表达式 MODIFIER:模式(‘i’不区分大小写进行检索;‘c’区分大小写进行检索。默认为’c’)

示例:

SELECT ENAME, JOB FROM EMP WHERE REGEXP_LIKE(JOB, '(clerk|analyst)', 'i');

结果:

ENAMEJOBSMITHCLERKJAMESCLERKFORDANALYSTSCOTTANALYST 二、REGEXP_INSTR() REGEXP_INSTR(STRING, REGEX[, START_POSITION[, OCCURRENCE[, RETURN_OPTION[, MODIFIER]]]])

STRING:需要进行正则处理的字符串 REGEX:进行匹配的正则表达式 START_POSITION:起始位置,从字符串的第几个字符开始正则表达式匹配(默认从第一个字符开始,值为1) OCCURRENCE:获取分割出来的第几组子串(分割后最初的字符串会按分割的顺序排列成数组) RETURN_OPTION:指定返回值的类型。为0,则返回匹配值第一次出现的第一个字符的角标,非0,则返回匹配值第一次出现的最后一个字符的角标+1 MODIFIER:模式 ‘c’ 区分大小写进行检索。默认为‘c’ ‘i’ 不区分大小写进行检索 ‘n’ 允许句点(.)作为通配符去匹配换行符。如果省略该参数,句点将不匹配换行符 ‘m’ 将源串视为多行。即 Oracle 中将^和$分别看作源串中任意位置任何行的开始和结束,而不是仅仅看作整个源串的开始或结束。如果省略该参数,则Oracle将源串看作一行。 ‘x’ 忽略源串中的空格字符。默认情况下,空格字符与自身相匹配。 返回值:返回满足正则表达式的字符或字符串第一次出现的角标,如果没有找到结果,则返回0。

示例:

SELECT REGEXP_INSTR('11a22A33a', 'a') AS STR FROM DUAL;

结果:3

SELECT REGEXP_INSTR('11a22A33a11a22A33a', '2A', 1, 1, 0, 'c') AS STR FROM DUAL;

结果:5

SELECT REGEXP_INSTR('11a22A33a11a22A33a', '2A', 1, 1, 1, 'c') AS STR FROM DUAL;

结果:7

三、REGEXP_COUNT() REGEXP_COUNT(STRING, REGEX[, START_POSITION[, MODIFIER]])

STRING:需要进行正则处理的字符串 REGEX:进行匹配的正则表达式 START_POSITION:起始位置,从字符串的第几个字符开始正则表达式匹配(默认从第一个字符开始,值为1) MODIFIER:模式 ‘c’ 区分大小写进行检索。默认为‘c’ ‘i’ 不区分大小写进行检索 ‘n’ 允许句点(.)作为通配符去匹配换行符。如果省略该参数,句点将不匹配换行符 ‘m’ 将源串视为多行。即 Oracle 中将^和$分别看作源串中任意位置任何行的开始和结束,而不是仅仅看作整个源串的开始或结束。如果省略该参数,则Oracle将源串看作一行。 ‘x’ 忽略源串中的空格字符。默认情况下,空格字符与自身相匹配。 返回值:返回满足正则表达式的字符或字符串出现的次数。

示例:

SELECT REGEXP_COUNT('11a22A33a11a22A33a', '2A', 1, 'c') AS STR FROM DUAL;

结果:2

四、REGEXP_SUBSTR() REGEXP_SUBSTR(STRING, REGEX[, START_POSITION[, OCCURRENCE[, MODIFIER]]])

STRING:需要进行正则处理的字符串 REGEX:进行匹配的正则表达式 START_POSITION:起始位置,从字符串的第几个字符开始正则表达式匹配(默认从第一个字符开始,值为1) OCCURRENCE:获取分割出来的第几组子串(分割后最初的字符串会按分割的顺序排列成数组) MODIFIER:模式 ‘c’ 区分大小写进行检索。默认为‘c’ ‘i’ 不区分大小写进行检索 ‘n’ 允许句点(.)作为通配符去匹配换行符。如果省略该参数,句点将不匹配换行符 ‘m’ 将源串视为多行。即 Oracle 中将^和$分别看作源串中任意位置任何行的开始和结束,而不是仅仅看作整个源串的开始或结束。如果省略该参数,则Oracle将源串看作一行。 ‘x’ 忽略源串中的空格字符。默认情况下,空格字符与自身相匹配。

示例:

SELECT REGEXP_SUBSTR('11a22A33a', '[^A]+', 1, 1, 'i') AS STR FROM DUAL;

结果:11 分析:正则表达式是以A为标识进行分割,而’i’标识不区分大小写,从第一个字符开始,取第一组截取结果,所以结果是11,而不是11a22

SELECT REGEXP_SUBSTR('11a22A33a', '[^A]+', 1, 1, 'c') AS STR FROM DUAL;

结果:11a22 分析:正则表达式是以A为标识进行分割,而’c’标识区分大小写,从第一个字符开始,取第一组截取结果,所以结果是11a22,而不是11

SELECT REGEXP_SUBSTR('11a22A33a', '[^A]+', 4, 1, 'i') AS STR FROM DUAL;

结果:22 分析:正则表达式是以A为标识进行分割,而’i’标识不区分大小写,从第四个字符开始,取第一组截取结果,所以结果是22,而不是11

SELECT REGEXP_SUBSTR('11a22A33a', '[^A]+', 4, 1, 'c') AS STR FROM DUAL;

结果:22 分析:正则表达式是以A为标识进行分割,而’c’标识区分大小写,从第四个字符开始,取第一组截取结果,所以结果是22,而不是11a22

优化:

SELECT REGEXP_SUBSTR('11a22A33a', '[^A]+', 1, LEVEL, 'c') AS STR FROM DUAL CONNECT BY LEVEL


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3