Oracle REGEXP_INSTR() 函数使用指南
Oracle REGEXP_INSTR()
是一个内置函数,它返回一个给定的正则表达式模式在一个源字符串中匹配的子串的索引。
您可以认为该函数是增加了正则表达式的 INSTR()
。
Oracle REGEXP_INSTR()
语法
这里是 Oracle REGEXP_INSTR()
函数的语法:
REGEXP_INSTR(source_char, pattern)
REGEXP_INSTR(source_char, pattern, position, )
REGEXP_INSTR(source_char, pattern, position, occurrence)
REGEXP_INSTR(source_char, pattern, position, occurrence, return_opt)
REGEXP_INSTR(source_char, pattern, position, occurrence, return_opt, match_param)
REGEXP_INSTR(source_char, pattern, position, occurrence, return_opt, match_param, subexpr)
参数
source_char
-
必需的。从中搜索的字符串。它可以是
CHAR
,VARCHAR2
,NCHAR
,NVARCHAR2
,CLOB
, 或NCLOB
中的任何一种数据类型。 pattern
-
必需的。正则表达式。它可以是
CHAR
,VARCHAR2
,NCHAR
, 或NVARCHAR2
中的任何一种数据类型。它最多包含 512 字节。 position
-
可选的。它是一个整数,指示开始搜索的起始位置。默认为
1
。 occurrence
-
可选的。它是一个整数,指示要返回的是第几次出现。默认为
1
。 return_opt
-
可选的。指定返回哪一种位置索引。如果为
0
,返回匹配的子串的第一个字符的位置索引;如果为1
,返回匹配的子串的后面的位置索引。默认为0
. match_param
-
可选的。执行匹配采用的模式。它可以是
VARCHAR2
或CHAR
。您可以通过此参数改变默认的搜索行为。您可以使用以下的一个或多个字符:'i'
指定不区分大小写的匹配,即使确定的条件排序规则区分大小写。'c'
指定区分大小写和区分重音的匹配,即使确定的条件排序规则不区分大小写或不区分重音。'n'
允许句点 (.
)(匹配任意字符)匹配换行符。如果省略此参数,则句点与换行符不匹配。'm'
将源字符串视为多行。Oracle 将插入符号 (^
) 和美元符号 ($
) 分别解释为源字符串中任意行的开始和结束,而不仅仅是整个源字符串的开始或结束。如果省略此参数,则 Oracle 会将源字符串视为单行。'x'
忽略空白字符。默认情况下,空白字符匹配自身。
subexpr
-
可选的。它从 0 到 9。
0
表示整个正则表达式,1-9
表示正则表达式中的分组。默认值为0
。
返回值
Oracle REGEXP_INSTR()
函数返回一个整数,它是给定的正则表达式模式在一个源字符串中匹配的子串的索引。
如果源字符串没有与正则表达式模式匹配的内容, REGEXP_INSTR()
将返回 0
。
如果除 match_param
之外的任意一个参数为 NULL
, REGEXP_COUNT()
将返回 NULL
。
Oracle REGEXP_INSTR()
示例
这里有几个展示了 Oracle REGEXP_INSTR()
函数用法的示例。
基本用法
以下语句用来找出字符串 '123abc456def'
中的连续的数字第 1 次出现的索引。
SELECT
REGEXP_INSTR('abc123def456', '\d+')
FROM dual;
输出:
REGEXP_INSTR('ABC123DEF456','\D+')
_____________________________________
4
起始位置
以下语句用来找出字符串 '123abc456def'
中的连续的数字第 1 次出现的索引,从第 7 个字符开始搜索。
SELECT
REGEXP_INSTR('abc123def456', '\d+', 7)
FROM dual;
输出:
REGEXP_INSTR('ABC123DEF456','\D+',7)
_______________________________________
10
第几次出现
以下语句用来找出字符串 '123abc456def'
中的连续的数字第 2 次出现的索引。
SELECT
REGEXP_INSTR('abc123def456', '\d+', 1, 2)
FROM dual;
输出:
REGEXP_INSTR('ABC123DEF456','\D+',1,2)
_________________________________________
10
索引类型
以下语句用来找出字符串 '123abc456def'
中的连续的数字第 1 次出现的后面的索引。
SELECT
REGEXP_INSTR('abc123def456', '\d+', 1, 1, 1)
FROM dual;
输出:
REGEXP_INSTR('ABC123DEF456','\D+',1,1,1)
___________________________________________
7
匹配参数
Oracle REGEXP_INSTR()
函数允许您指定匹配参数以改变搜索的行为。 Oracle 默认执行区分大小写的搜索,如果您不区分大小写,请使用 i
参数。
SELECT
REGEXP_INSTR('ABC123def456', '[a-z]+') "Result1",
REGEXP_INSTR('ABC123def456', '[a-z]+', 1, 1, 0, 'i') "Result2"
FROM dual;
输出:
Result1 Result2
__________ __________
7 1
NULL 参数
如果除 match_param
之外的任意一个参数为 NULL
, REGEXP_COUNT()
将返回 NULL
。
SET NULL 'NULL';
SELECT
REGEXP_INSTR(NULL, 'a') "Result1",
REGEXP_INSTR('a', NULL) "Result2",
REGEXP_INSTR('a', 'b', NULL) "Result3",
REGEXP_INSTR('a', 'b', 1, NULL) "Result4",
REGEXP_INSTR('a', 'b', 1, 1, NULL) "Result5",
REGEXP_INSTR('a', 'b', 1, 1, 0, NULL) "Result6",
REGEXP_INSTR('a', 'b', 1, 1, 0, 'i', NULL) "Result7"
FROM dual;
输出:
Result1 Result2 Result3 Result4 Result5 Result6 Result7
__________ __________ __________ __________ __________ __________ __________
NULL NULL NULL NULL NULL 0 NULL
在本示例中,我们使用 SET NULL 'NULL';
语句将 NULL
值显示为 'NULL'
字符串。
结论
Oracle REGEXP_INSTR()
是一个内置函数,它返回一个给定的正则表达式模式在一个源字符串中匹配的子串的索引。