一、REGEXP_LIKE--查找与正则表达式匹配的字符串。
语法:REGEXP_LIKE(source_char, pattern[, match_param ])
二、REGEXP_COUNT--计算模式在源串中出现的次数
语法:REGEXP_COUNT (source_char, pattern [, position [, match_param]])
三、REGEXP_INSTR--返回模式在源串中的位置
语法:REGEXP_INSTR (source_char, pattern
[, position
[, occurrence
[, return_opt
[, match_param
[, subexpr]
]
]
]
]
四、REGEXP_SUBSTR--返回模式
语法:REGEXP_SUBSTR(source_char, pattern
[, position
[, occurrence
[, match_param
[, subexpr
]
]
]
]
)
五、REGEXP_REPLACE--替换源串中的文本
语法:REGEXP_REPLACE(source_char, pattern
[, replace_string
[, position
[, occurrence
[, match_param ]
]
]
]
)
source_char:要搜索的字段。
pattern:正则表达式。
position:是一个正整数,表明oracle从源串左侧第几个位置开始搜索,可选,默认是1。
occurrence:第几次出现,可选。
return_opt:0代表开始位置,1代码结束位置。默认是0,可选。
match_param:匹配的参数,可选。
subexpr:子表达式,11g后开始支持此参数选项。可选。
replace_string:替换文本。
i:不区分大小写。
c:区分大小写。
n:允许句点(.)作为通配符去匹配换行符。如果省略该参数,则句点将不匹配换行符。。
m:将source_char作为一个包含多行的字符串。
x:忽略空白字符,默认情况下空白字符匹配自身。
如果复合参数设置有矛盾,则oracle默认选后面的参数,如'ic',则默认区分大小写。
如果指定的参数不是oracle在上述所定义的,则oracle返回一个错误。
如果省略了match_param参数,则:
1.区分大小写是由nls_sort参数的值决定的(此参数的默认值BINARY是区分大小写的)。
SQL> conn /as sysdba
已连接。
SQL> select * from v$nls_parameters where parameter ='NLS_SORT';
PARAMETER VALUE
------------------------------- -------------------------------
NLS_SORT BINARY
SQL> select * from chn.fzq where regexp_like(chn.fzq.value,'^1[2b]');
ID VALUE
---- ----------
1 1234560
2 1234560
3 1b3b560
7 123 45
1 1234560
已选择5行
SQL> ALTER SESSION SET NLS_SORT='BINARY_CI';
会话已更改
SQL> select * from chn.fzq where regexp_like(chn.fzq.value,'^1[2b]');
ID VALUE
---- ----------
1 1234560
2 1234560
3 1b3b560
7 123 45
10 1B
1 1234560
已选择6行。
2.句点不匹配换行符。
3.source_char被视为单行。
Examples:
1、REGEXP_LIKE:
SQL> SELECT first_name, last_name
FROM employees
WHERE REGEXP_LIKE (first_name, '^Ste(v|ph)en$')
ORDER BY first_name, last_name;
FIRST_NAME LAST_NAME
-------------------- -------------------------
Steven King
Steven Markle
Stephen Stiles
2、REGEXP_COUNT:
SQL> SELECT REGEXP_COUNT('123123123123123', '(12)3', 1, 'i') REGEXP_COUNT
FROM DUAL;
REGEXP_COUNT
------------
5
3、REGEXP_INSTR:
SQL>SELECT
REGEXP_INSTR('500 Oracle Parkway, Redwood Shores, CA','[^ ]+', 1, 6) "REGEXP_INSTR"
FROM DUAL;
REGEXP_INSTR
------------
37
4、REGEXP_SUBSTR:
SQL>SELECT REGEXP_SUBSTR('1234567890', '(123)(4(56)(78))', 1, 1, 'i', 1) "REGEXP_SUBSTR"
FROM DUAL;
REGEXP_SUBSTR
-------------------
123
5、REGEXP_REPLACE:
SQL>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
. . .