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;
下面这个例子给出一个字符串, “1”为开始位置 “2”是搜索第二个匹配的,”0”是return_option 返回出现的第一个字符位置
“c”是区分大小写 ,所以将返回13
SELECT REGEXP_INSTR ('my is itMyhome', 'm', 1, 2, 0, 'c')
FROM dual;
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;
这个例子将返回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...