REGEXP_INSTR函数让你搜索一个正则表达式模式字符串。函数使用输入字符集定义的字符进行字符串的计算。

它返回一个整数,指示开始或结束匹配的子位置,这取决于return_option参数的值。如果没有找到匹配,则函数返回0。

Oracle数据库中的REGEXP_INSTR函数的语法是:

REGEXP_INSTR (source_char, pattern [, position [, occurrence [, return_option [, match_parameter ] ] ]  ] )

source_char

搜索值的字符表达式,可以是任何数据类型CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB或NCLOB的。

pattern

正则表达式

Value Description
^ Matches the beginning of a string. If used with a match_parameter of ‘m’, it matches the start of a line anywhere within expression .
$ Matches the end of a string. If used with a match_parameter of ‘m’, it matches the end of a line anywhere within expression .
* 匹配零个或多个.
+ 匹配一个或多个出现.
? 匹配零次或一次出现.
. 匹配任何字符,除了空.
| Used like an "OR" to specify more than one alternative.
[ ] Used to specify a matching list where you are trying to match any one of the characters in the list.
[^ ] Used to specify a nonmatching list where you are trying to match any character except for the ones in the list.
( ) Used to group expressions as a subexpression.
{m} Matches m times.
{m,} Matches at least m times.
{m,n} Matches at least m times, but no more than n times.
\n n is a number between 1 and 9. Matches the nth subexpression found within ( ) before encountering \n.
[..] Matches one collation element that can be more than one character.
[::] Matches character classes.
[==] Matches equivalence classes.
\d 匹配一个数字字符.
\D 匹配一个非数字字符.
\w 匹配包括下划线的任何单词字符.
\W 匹配任何非单词字符.
\s 匹配任何空白字符,包括空格、制表符、换页符等等.
\S 匹配任何非空白字符.
\A Matches the beginning of a string or matches at the end of a string before a newline character.
\Z Matches at the end of a string.
*? Matches the preceding pattern zero or more occurrences.
+? Matches the preceding pattern one or more occurrences.
?? Matches the preceding pattern zero or one occurrence.
{n}? Matches the preceding pattern n times.
{n,}? Matches the preceding pattern at least n times.
{n,m}? Matches the preceding pattern at least n times, but not more than m times.

position

可选。搜索在字符串中的开始位置。如果省略,则默认为1,这是字符串中的第一个位置。

occurrence

可选。它是模式字符串中的第n个匹配位置。如果省略,默认为1。

return_option

可选 指定Oracle返回的位置:

如果指定0,那么Oracle将返回出现的第一个字符的位置。这是默认的。

如果指定1,则Oracle返回字符之后发生的位置。

match_parameter

可选。它允许你修改REGEXP_INSTR功能匹配的行为。它可以是以下的组合:

Value Description
‘c’ 区分大小写的匹配.
‘i’ 不区分大小写的匹配.
‘n’ Allows the period character (.) to match the newline character. By default, the period is a wildcard.
‘m’ expression is assumed to have multiple lines, where ^ is the start of a line and $ is the end of a line, regardless of the position of those characters in expression . By default, expression is assumed to be a single line.
‘x’ Whitespace characters are ignored. By default, whitespace characters are matched like any other character.

Examples 匹配单个字符

下面看一个最简单的情况,找到字符串中的第一个”e”字的位置。

SELECT REGEXP_INSTR ('hello itmyhome', 'e')
FROM dual; 
-- Result: 2

下面这个例子给出一个字符串, “1”为开始位置 “2”是搜索第二个匹配的,”0”是return_option 返回出现的第一个字符位置

“c”是区分大小写 ,所以将返回13

SELECT REGEXP_INSTR ('my is itMyhome', 'm', 1, 2, 0, 'c')
FROM dual; 
-- Result: 13

Examples 匹配多个字符

我们将使用REGEXP_INSTR函数来匹配多字符模式。

SELECT REGEXP_INSTR ('World filled with love', 'with', 1, 1, 0, 'i')
FROM dual;

这个例子将字符串中返回’with’的第一次出现,它将匹配一个词组。

我们可以改变搜索的开始位置,以便我们执行搜索从字符串的中间开始。

For example:

SELECT REGEXP_INSTR ('my name is itmyhome', 'my', 10, 1, 0, 'i')
FROM dual;

这个例子将开始搜索”my”在字符串中的位置10。在这种情况下,在搜索之前,它会跳过字符串中的前9个字符。

Examples 匹配多个备选

下面的例子,我们将使用 | 模式。该|模式用于像一个”或”指定多个替代方案。

For example:

SELECT REGEXP_INSTR ('Itmyhome', 'a|i|o|e|u')
FROM dual;
-- Result: 6

这个例子将返回6,因为它是搜索的第一个元音(a,i,o,e或u)字符串。由于我们没有指定match_parameter值时,

REGEXP_INSTR函数将执行区分大小写的搜索,这意味着在”Itmyhome”的’I’将不匹配。


作者: itmyhome

文章目录1 概述2 匹配规则3 正则 函数 3.1 regex p_substr()3.2 regex p_ instr ()3.3 regex p_replace()3.4 regex p_like() 1. 作用:处理字符时,很强大 2. 分类:与下列相似,当功能更加强大('支持正则表达式') (1) regex p_like : 同 like 功能相似(模糊 '匹配') (2) regex p_ instr : 同 instr 功能相似(返回字符所在 '下标') (3) regex p_s REGEX P_LIKE 函数 的使用场景 oracle 中有两张表,一张叫A_PACKAGE,另一张叫A_RULE,两张表通过PACKAGE_ID关联。其中,A_PACKAGE表中有一个字段channelId,存储的是'B,C,PUB'格式的(多个channelId用逗号隔开),现在已知channelId='B',如何根据'B'查找符合条件的A_RULE? 正则表达式已经在很多软件中得到广泛的应用,包括*nix(Linux, Unix等),HP等操作系统,PHP,C#,Java等开发环境。 本文主要介绍了关于 Oracle 中正则表达式的使用方法,下面话不多说了,来一起看看详细的介绍。 Oracle 使用正则表达式离不开这4个 函数 regex p_like、 regex p_substr、 regex p_ instr regex p_replace。 regex p_like 该 函数 只能用于条件表达式,和 like 类似,但是使用的正则表达式进行匹配 //查询所有包含小写字母或者数字的记录。 select * from fzq where regex p_ [xyz]:字符集,匹配包含的任一字符,例如"[abc]“匹配"plain"中的"a” [^xyz]:反向字符集,匹配未包含的任何字符,例如"[ ^abc]“匹配"plain"中的"p”, “l”, “i”, “n” [a-z]:字符范围,匹配指定范围内的任何字符,例如"[a-z]"匹配"a"到"z"范围内的任何小写字母 [^a-z]:反向范围字符,匹配不在指定范围内的任何字符,例如"[ ^a-z]“匹配任何不在"a"到"z” 范围内的字符 (pattern):匹配patte 正则表达式在 Oracle 10g中的应用-- REGEX P_ INSTR 函数 了解 REGEX P_ INSTR 函数 以前,我们先来了解 INSTR 函数 INSTR 返回的是一个字符串在另外一个字符串中的位置,如字符串world在字符串hello world中的位置是7,即下面的语句返回值为 这个表达式包含五个子表达式,顺序如下:“abcdefghi”,“abcdef”,“abc”,“de”和“678”。如果subexpr为零,那么返回匹配pattern中整个字符串的子字符串位置。如果的subexpr大于零,则返回匹配对应于子表达式编号的subexpr的子字符串位置。如果pattern不包含subexpr子表达式, 函数 返回0。一个空的subexpr值返回NULL。Subexpr默认值是... ORACLE 中的支持正则表达式的 函数 主要有下面四个:1, REGEX P_LIKE :与LIKE的功能相似2, REGEX P_ INSTR :与 INSTR 的功能相似3, REGEX P_SUBSTR :与SUBSTR的功能相似4, REGEX P_REPLACE :与REPLACE的功能相似它们在 用法 上与 Oracle SQL 函数 LIKE、 INSTR 、SUBSTR 和REPLACE 用法 相同。格式: REGEX P_... regex p_ instr REGEX P_ INSTR 函数 返回模式的起始位置,因此其工作方式与熟悉的 INSTR 函数 非常相似 REGEX P_ INSTR (源字符串,模式[,开始位置[,出现[,返回选项[,匹配参数]]]])) source_string-可以是CHAR,VARCHAR2,CLOB,NCHAR,NVARCHAR2和NCLOB的列,但不能是LONG数据类型 st...