1.regexp_like : 只能用于条件表达式 , 和 like 功能相似 , 进行条件匹配
如 : regexp_like(t.value,'(^(12)$|^(12,)|(,12,)|(,12)$)')--正则表达式中的|前后不能有空
判断字符串中某个值是否存在
2.regexp_substr : 截取符合正则表达式描述的字符串
function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)
__srcstr :需要进行正则处理的字符串
__pattern :进行匹配的正则表达式,匹配的值将返回,返回策略由__occurrence决定
__position :起始位置,从第几个字符开始正则表达式匹配(默认为1)
__occurrence :标识第几个匹配组,默认为1
__modifier :模式(’i’不区分大小写进行检索,’c’区分大小写进行检索。默认为’c’。)
SELECT REGEXP_SUBSTR('17,20,23','[^,]+',1,1,'i') AS STR FROM DUAL;
结果:
STR
-----
17
2、查询使用正则分割后的最后一个值,也就是23
[sql]
SELECT REGEXP_SUBSTR('17,20,23','[^,]+',1,3,'i') AS STR FROM DUAL;
结果:
STR
----
23
[sql]
SELECT REGEXP_SUBSTR('17,20,23', '[^,]+', 1, LEVEL, 'i') AS STR
FROM DUAL
CONNECT BY LEVEL <=
LENGTH('17,20,23') - LENGTH(REGEXP_REPLACE('17,20,23', ',', ''))+1;
结果:
STR
----
17
20
23
3.regexp_instr : 和 instr 类似,用于标定符合正则表达式的字符子串的开始位置
语法
REGEXP_INSTR (source_char, pattern [, position [, occurrence [, return_option [, match_parameter ] ] ] ] )
source_char
搜索值的字符表达式,可以是任何数据类型CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB或NCLOB的。
position
可选。搜索在字符串中的开始位置。如果省略,则默认为1,这是字符串中的第一个位置。
occurrence
可选。它是模式字符串中的第n个匹配位置。如果省略,默认为1。
return_option
可选 指定oracle返回的位置:
如果指定0,那么Oracle将返回出现的第一个字符的位置。这是默认的。
如果指定1,则Oracle返回字符之后发生的位置。
match_parameter
可选。它允许你修改REGEXP_INSTR功能匹配的行为。
示例
SELECT REGEXP_INSTR ('hello itmyhome', 'e')
FROM dual;
-- Result: 2
SELECT REGEXP_INSTR ('my is itMyhome', 'm', 1, 2, 0, 'c')
FROM dual;
-- Result: 13
SELECT REGEXP_INSTR ('Itmyhome', 'a|i|o|e|u')
FROM dual;
-- Result: 6
4.regexp_replace : 和 replace 类似,用于替换符合正则表达式的字符串
语法
REGEXP_REPLACE(source_char, pattern [, replace_string [, position [, occurrence [, match_parameter ] ] ] ] )
source_char
搜索值的字符表达式。这通常是一个字符列,可以是任何数据类型CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB或NCLOB。
pattern
正则表达式
replace_string
可选。匹配的模式将被替换replace_string字符串。如果省略replace_string参数,
将删除所有匹配的模式,并返回结果字符串。
position
可选。在字符串中的开始位置搜索。如果省略,则默认为1。
occurrence
可选。是一个非负整数默认为1,指示替换操作的发生:
如果指定0,那么所有出现将被替换字符串。
如果指定了正整数n,那么将替换第n次出现。
match_parameter
可选。它允许你修改REGEXP_REPLACE功能匹配的行为。
示例
SELECT REGEXP_REPLACE ('itmyhome is my network id', '^(\S*)', 'luck')
FROM dual;
Result: luck is my network id
SELECT REGEXP_REPLACE ('2, 5, and 10 are numbers in this example', '\d', '#')
FROM dual;
Result: '#, #, and ## are numbers in this example'
SELECT REGEXP_REPLACE ('2, 5, and 10 are numbers in this example', '(\d)(\d)', '#')
FROM dual;
Result: '2, 5, and # are numbers in this example'