元字符
参考:http://docs.oracle.com/cd/E11882_01/appdev.112/e41502/adfns_regexp.htm#ADFNS1003
* 匹配0次或者多次出现
+ 匹配1次或者多次出现
?非贪婪模式,匹配0次或1次出现
^ 行开始
$ 行结束
. 匹配任一字符 非null或换行符
[] 一个匹配列表 [: :] 指定类 例如 [:alpha:]
() 单个表达式,作为一个单元
{} 匹配次数
\ 匹配特殊字符,常量后者引用 如 \n 匹配换行符, \\匹配\, \)匹配)
匹配选项
i 用于不区分大小写的匹配
c 用于区分大小写的匹配
m 将源字符串视为多行
n 将 “.” 作为通配符
字符类
[:alnum:] 所有字母和数字字符
[:alpha:] 所有的字母字符
[:blank:] 所有空格字符
[:cntrl:] 所有控制字符
[:digit:] 所有数字
[:xdigit:] 所有十六进制字符
[:lower :] 所有小写字母
[:upper:] 所有大写字母
[:punct:] 所有标点符号
[:space :] 所有空格字符
[:graph :] 包括 [:punct:] [:lower :] [:upper:] [:digit:]
REGEXP_SUBSTR
参考:http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions150.htm#SQLRF06303
REGEXP_SUBSTR用于使用正则表达式返回指定字符串的起点和终点。
REGEXP_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。
实例:
SQL> SELECT
2 REGEXP_SUBSTR('500 Oracle Parkway, RedwoodShores, CA',
3 ',[^,]+,')"REGEXPR_SUBSTR"
4 FROM DUAL;
REGEXPR_SUBSTR
-----------------
, Redwood Shores,
SQL> SELECT
2 REGEXP_SUBSTR('http://www.example.com/products',
3 'http://([[:alnum:]]+\.?){3,4}/?') "REGEXP_SUBSTR"
4 FROM DUAL;
REGEXP_SUBSTR
-----------------------
http://www.example.com/
SQL> SELECT REGEXP_SUBSTR('1234567890', '(123)(4(56)(78))', 1,1, 'i', 1)
2 "REGEXP_SUBSTR" FROM DUAL;
REG
---
123
SQL> SELECT REGEXP_SUBSTR('1234567890', '(123)(4(56)(78))', 1,1, 'i', 4)
2 "REGEXP_SUBSTR" FROM DUAL;
RE
--
78
REGEXP_LIKE
http://docs.oracle.com/cd/E11882_01/server.112/e41084/conditions007.htm#SQLRF00501
REGEXP_LIKE
(source string,pattern [,match_parameter])
source_string:
源字符串
Pattern:
正则表达式
match_parameter:
匹配模式(i:不区分大小写;c:区分大小写;n:允许使用可以匹配任意字符串的操作符;m:将x作为一个包含多行的字符串。
实例:
hr_main.sql脚本 http://wiki.joanillo.org/images/4/48/Hr_main.txt
SQL> SELECT first_name, last_name
2 FROM employees
3 WHERE REGEXP_LIKE (first_name,'^Ste(v|ph)en$')
4 ORDER BY first_name, last_name;
FIRST_NAME LAST_NAME
---------------------------------------------
Stephen Stiles
Steven King
Steven Markle
3 rows selected.
SQL> SELECT last_name
2 FROM employees
3 WHERE REGEXP_LIKE (last_name,'([aeiou])\1', 'i')
4 ORDER BY last_name;
LAST_NAME
-------------------------
Bloom
De Haan
Feeney
Gee
Greenberg
Greene
Khoo
Lee
8 rows selected.
REGEXP_INSTR
http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions148.htm#SQLRF06300
REGEXP_INSTR
(source_string, pattern [,position [,occurrence[,return_option[,match_parameter]]]])
start_position:
开始搜索位置
Occurrence:
第n次出现pattern,默认为1
return_option:
0:pattern的起始位置
1:pattern下一个字符起始位置默认为0
实例:
SQL> SELECT
2 REGEXP_INSTR('500 OracleParkway, Redwood Shores, CA',
3 '[^ ]+', 1, 6)"REGEXP_INSTR"
4 FROM DUAL;
REGEXP_INSTR
------------
37
SQL> SELECT
2 REGEXP_INSTR('500 OracleParkway, Redwood Shores, CA',
3 '[s|r|p][[:alpha:]]{6}', 3, 2, 1, 'i') "REGEXP_INSTR"
4 FROM DUAL
5 /
REGEXP_INSTR
------------
28
SQL> SELECT REGEXP_INSTR('1234567890','(123)(4(56)(78))', 1, 1, 0, 'i', 1)
2 "REGEXP_INSTR" FROMDUAL;
REGEXP_INSTR
------------
1
SQL> SELECT REGEXP_INSTR('1234567890','(123)(4(56)(78))', 1, 1, 0, 'i', 2)
2 "REGEXP_INSTR" FROMDUAL;
REGEXP_INSTR
------------
4
SQL> SELECT REGEXP_INSTR('1234567890','(123)(4(56)(78))', 1, 1, 0, 'i', 4)
2 "REGEXP_INSTR" FROMDUAL;
REGEXP_INSTR
------------
7
REGEXP_REPLACE
http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions149.htm#SQLRF06302
REGEXP_REPLACE
(source_string, pattern [,replace_string] [,position][,occurtence] [,match_parameter])
replace_string:
用于替换的字符串
Position:
开始搜索的起始位置
occurtence
指定替换第n次出现字符串
其他同上。
实例:
SQL> SELECT
2 REGEXP_REPLACE('500 Oracle Parkway, Redwood Shores, CA',
3 '( ){2,}', '') "REGEXP_REPLACE"
4 FROM DUAL;
REGEXP_REPLACE
--------------------------------------
500 Oracle Parkway, Redwood Shores, CA
regexp_count
http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions147.htm#SQLRF20014
regexp_count是11g引入的,用于统计匹配字符串出现次数。
实例:
SQL> SELECTREGEXP_COUNT('123123123123123', '(12)3', 1, 'i') REGEXP_COUNT
2 FROM DUAL;
REGEXP_COUNT
------------
5
SQL> SELECT REGEXP_COUNT('123123123123','123', 3, 'i') COUNT FROM DUAL;
COUNT
----------
3
本文介绍了Oracle数据库中正则表达式的应用,包括REGEXP_SUBSTR、REGEXP_LIKE、REGEXP_INSTR和REGEXP_REPLACE等函数的具体用法,并通过实例展示了如何使用这些函数进行字符串操作。
857

被折叠的 条评论
为什么被折叠?



