1.REGEXP_LIKE
regexp_like(source_char,parttern[,match_parameter]);
parttern是正则表达式,
match_parameter正则表达式的匹配模式:
'i'表示大小写不敏感。
'c'表示大小写敏感。
'n'表示正则表达式中点号(.)匹配任意字符的规则,如果没有设置则表示点仅表示点
'm'表示将source_char当做多行来对待,^表示字符串的起点,$表示字符串的终点,如果没有设置则将字符串当做单行来处理
x:扩展模式,忽略正则表达式中的空白字符。
如果match_parameter整个忽略没有设置,则默认是大小写敏感,点不匹配任意字符,source_char当做单行对待。
2.REDEXP_COUNT
查找满足正则表达式的字符串的个数。
regexp_count(source_char,pattern[,position[,match_parameter]])
3.REGEXP_INSTR
repexp_instr(source_char,parttern[.position[,occurrence[,return_opt[,match_parameter[,subexpr]]]]])
返回满足正则表达式的字符串所在的位置。
position是开始搜索的起始位置,默认是从1开始搜索。
occurrence是第几次查找到满足条件的字符串。
return_option取值为0或者1,0表示返回满足条件字符串第一个字符的位置,1表示返回满足条件字符串的之后的字符的位置。
match_parameter同regexp_like。
subexpr是一个在0-9之间的非负整数值。主要是针对在pattern里面有()的正则表达式而言的。
比如(123)(4(56)(78)(0)):从有()的开始,在()里面从左到右依次为:1表示123,2表示456780,3表示56,4表示78,5表示0,在该内正则表达式中要先满足123456780这个字符串的基础上再满足子字符串的匹配。
SQL> SELECT REGEXP_INSTR('123456789056780',
'(123)(4(56)(78)(0))', 1, 1, 0, 'i',
3) "REGEXP_INSTR" FROM DUAL;
//没有满足条件的123456780只有1234567890所以不满足条件返回0
REGEXP_INSTR
------------
0
SQL> SELECT REGEXP_INSTR('1234567809056780',
'(123)(4(56)(78)(0))', 1, 1, 0, 'i'
, 3) "REGEXP_INSTR" FROM DUAL;
REGEXP_INSTR
------------
5
SQL> SELECT REGEXP_INSTR('1234567809056780',
'(123)(4(56)(78)(0))', 1, 1, 0, 'i'
, 5) "REGEXP_INSTR" FROM DUAL;
REGEXP_INSTR
------------
9
SQL> SELECT REGEXP_INSTR('12345678090123456780',
'(123)(4(56)(78)(0))', 1, 2, 0,
'i', 5) "REGEXP_INSTR" FROM DUAL;
//有2个满足条件的123456780字符串
REGEXP_INSTR
------------
20
SQL> SELECT REGEXP_INSTR('1234567809056780',
'(123)(4(56)(78)(0))', 1, 2, 0, 'i'
, 5) "REGEXP_INSTR" FROM DUAL;
REGEXP_INSTR
------------
0
4.REGEXP_SUBSTR
以正则表达式来搜索满足条件的字符串。
regexp_substr(source_char,pattern[,position[,occurrence[,match_parameter[,subexpr]]]])
SQL> SELECT REGEXP_SUBSTR('500 Oracle Parkway, Redwood Shores,
CA','[^ ]+', 1, 6
) "REGEXP_INSTR" FROM DUAL;
RE
--
CA
5.REGEXP_REPLACE
regexp_replace(source_char,parttern,replace_string[,position[,occurrence[,match_parameter]]])
occurrence:0表示替换所有满足条件的字符串,如果是非负整数n则仅替换第n个字符串。
SELECT
REGEXP_REPLACE(phone_number,
'([[:digit:]]{3}).([[:digit:]]{3}).([[:digit:]]{4})',
'(1) 2-3') "REGEXP_REPLACE"
FROM employees
ORDER BY "REGEXP_REPLACE";
REGEXP_REPLACE
--------------------------------------------------------------------------------
(515) 123-4444
(515) 123-4567
(515) 123-4568
(515) 123-4569
(515) 123-5555
上面的(1) 2-3中1表示子表达式1,2子表达式2,3子表达式3
'^'
匹配输入字符串的开始位置,(注意,若是在方括号表达式中使用^,此时它表示不接受该字符集合,如[^[:digit:]],不是数字)。
'$' 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '
' 或
'
'。
'.' 匹配除换行符之外的任何单字符。
'?' 匹配前面的子表达式零次或一次。
'+' 匹配前面的子表达式一次或多次。
'*' 匹配前面的子表达式零次或多次。
'|' 指明两项之间的一个选择。例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的字符串。
'( )' 标记一个子表达式的开始和结束位置。
'[]' 标记一个中括号表达式。
'{m,n}' 一个精确地出现次数范围,m=<出现次数<=n,'{m}'表示出现m次,'{m,}'表示至少
出现m次。
um 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。
字符簇:
[[:alpha:]] 任何字母。
[[:digit:]] 任何数字。
[[:alnum:]] 任何字母和数字。
[[:space:]] 任何白字符。
[[:upper:]] 任何大写字母。
[[:lower:]] 任何小写字母。
[[:punct:]] 任何标点符号。
[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]。
各种操作符的运算优先级
转义符
(), (?:), (?=), [] 圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, anymetacharacter 位置和顺序
正则表达式只是搜索,替换,格式化等功能,格式化一般用后向引用,没有计算length和concatenate