元字符字符含义举例说明
^匹配字符串的开始位置(在[]中使用,此时它表示不接受该字符集合。^a:匹配以a开始的字符串
[^a]:匹配不含a的字符串
-当使用在a-m表示范围;
当使用在第一个字符时表示
连字符串,如[-abc]
$匹配字符结束位置‘a$’:匹配以a结束的字符串
.匹配除换行符n之外的任何单字符。
?匹配前面的子表达式零次或一次tr(y(ing)?):可以表示try或者trying
*匹配前面的子表达式零次或多次
+匹配前面的子表达式一次或多次
()标记一个子表达式的开始和结束位置a(b)*可以匹配
ab,abb,abbb,youabb
(c|d)匹配c或d
[]标记一个中括号表达式[cd]匹配选择c或d等同于
(c|d)。匹配的是单字符,[^cd]是匹配c,d之外的单字符。
[a-z]表示所有小写字母
{m,n}m=
|表示或者的关系。指明两项之间的一个选择
字符簇字符含义
[[:alnum:]]字母和数字混合的字符
[[:alpha:]]字母字符
[[:cntrl:]]控制字符
[[:digit:]]数字字符
[[:graph:]]图像字符
[[:lower:]]小写字母字符
[[:print:]]打印字符
[[:punct:]]标点符号字符
Oracle支持正则表达式的内置函数名称语法备注
REGEXP_LIKEREGEXP_LIKE
(source_string,
pattern
[, match_parameter]
)source_string:
源字符串
Pattern:
正则表达式
match_parameter:
匹配模式(i:不区分大小写;c:区分大小写;n:允许使用可以匹配任意字符串的操作符;m:将x作为一个包含多行的字符串。
REGEXP_REPLACEREGEXP_REPLACE
(source_string,
pattern
[,replace_string]
[,position]
[,occurtence]
[,match_parameter]
)replace_string:
用于替换的字符串
Position:
开始搜索的起始位置
occurtence
指定替换第n次出现字符串
其他同上。
REGEXP_SUBSTRREGEXP_SUBSTR
(source_string, pattern
[,position
[,occurrence
[,match_parameter]]]
)Position:
指定在字符串中准确位置,默认为1
Occurrence:
指定在源字符串匹配过程中相对其他字符串,哪个字符串应该匹配。例如
select regexp_substr('The
zip code
80831 is for falcon, co',
'[[:alpha:]]{3,}', 1, 3)
from dual;
结果选择的是code而非The或zip。
REGEXP_INSTRREGEXP_INSTR
(source_string,
pattern
[,start_position
[,occurrence
[,return_option
[,match_parameter]]]]
)start_position:
开始搜索位置
Occurrence:
第n次出现pattern,默认为1
return_option:
0:pattern的起始位置
1:pattern下一个字符起始位置
默认为0
REGEXP_COUNTREGEXP_COUNT
(source_string,
pattern
[[,start_position]
[,match_parameter]])11g新增的函数,表示pattern在原字符串中出现的次数
start_position:
开始搜索的位置
Oracle支持正则表达式函数举例:
a)REGEXP_SUBSTR
REGEXP_SUBSTR为指定字符串的一部分与正则表达式建立匹配。语法如下:
REGEXP_SUBSTR(source_string,
pattern,
start_position,
occurrence,
match_parameter)
其中source_string是必须的。可以是带引号的字符串或者变量。Pattern是用单引号引用的与正则表达式。Start_position指定了在字符串中的准确位置,默认值为1。Occurrence是一个选项,指定在源字符串匹配过程中相对其他字符串,哪个字符串应该匹配。最后,match_parameter也是一个选项,指定在匹配时是否区分大水写。
示例1:
SQL> select regexp_substr('The zip code
80831 is for falcon, co','[[:digit:]]{5}' ) REGEXP_SUBSTR from dual;
REGEXP_SUBSTR
-------------
80831
示例2:
SQL> select regexp_substr('The zip code
80831 is for falcon, co', '[[:alpha:]]{3,}', 1, 3) REGEXP_SUBSTR from dual;
REGEXP_SUBSTR
-------------
code
示例3
SQL> select regexp_substr('comments or
questions - email [email protected]',
'[[:alnum:]](([_\.\-\+]?[[:alnum:]]+)*)@' ||
2
'([[:alnum:]]+)(([\.-]?[[:alnum:]]+)*)\.([[:alpha:]]{2,})') REGEXP_SUBSTR
3 from dual;
REGEXP_SUBSTR
----------------------
b)REGEXP_INSTR
REGEXP_INSTR返回与正则表达式匹配的字符和字符串的位置。如
SQL> select regexp_instr('The zip code 80831 is for falcon, co',
'[[:digit:]]{5}') REGEXP_INSTR from dual;
REGEXP_INSTR
------------
14
c)REGEXP_REPLACE
REGEXP_REPLACE与REPLACE函数类似,提供一种修改与所给正则表达式匹配的字符串的方法。作用包括纠正拼写错误、格式化输入输出的文本。
如电话号码的格式为:719-111-1111。使用REGEX_REPLACER的返回值是:
SQL> select
regexp_replace('Reformat the phone number 719-111-1111 ...',
2
'[1]?[-.]?(\(?[[:digit:]]{3}\)?)+[- .]?'
3 ||
'([[:digit:]]{3})[- .]?([[:digit:]]{4})',
4 ' (\1) \2-\3')
regexp_replace
5 from dual;
REGEXP_REPLACE
---------------------------------------------
Reformat the
phone number (719) 111-1111 ...
S
d)REGEXP_LIKE
REGEXP_LIKE运算符与LIKE运算符相似,但是功能更强大,因为它支持使用与此正则表达式与文本进行匹配。语法如下:
REGEXP_LIKE(source_string, pattern,
match_parameter)
Source_string可以是文字字符串,如果前面例中的字符串,也可以是包含某些字符串的变量或列。Pattern是要进行匹配的正则表达式。Match_parameter用于指定在匹配时是否区分大小写。
SQL> select
ename, job
2 from emp
3 where
regexp_like(job, '(clerk|analyst)', 'i');
ENAME JOB
----------
---------
SMITH CLERK
SCOTT ANALYST
ADAMS CLERK
JAMES CLERK
FORD ANALYST
MILLER CLERK