http://book.51cto.com 2008-12-16 15:05 史新元北英 清华大学出版社
@H_502_12@4.1.4 正则表达式函数 @H_502_12@本节介绍正则表达式及相关的Oracle数据库函数。使用这些函数可以在字符串中搜索字符模式。例如,假设有下列年份: 1965 |
^196[5-8]$ |
But,soft! What light through yonder window breaks? |
l[[:alpha:]]{4} |
元 字 符 |
意 思 |
例 子 |
\ |
说明要匹配的字符是一个特殊字符、常量或者反向引用。(反向引用重复上一次匹配。) |
\n 匹配换行符 \\ 匹配 \ \( 匹配( \) 匹配) |
^ |
匹配字符串的开头位置 |
如果A是字符串中的第一个字符,^A 匹配A |
$ |
匹配字符串的末尾位置 |
如果B是字符串中的最后一个字符,$B匹配B |
* |
匹配前面的字符0次或多次。 |
ba*rk 可以匹配 brk、bark、baark等等 |
+ |
匹配前面的字符1次或多次。 |
ba+rk 可以匹配bark、baark等等,但是不能匹配brk |
? |
匹配前面的字符0次或1次 |
ba?rk 只能匹配brk和bark |
{n} |
匹配一个字符恰好n次,其中n是一个整数 |
hob{2}it 可以匹配hobbit |
(续表)
元 字 符 |
意 思 |
例 子 |
|
{n,m} |
匹配一个字符至少n次,最多m次,其中n和m都是整数 |
hob{2,3}it 只能匹配hobbit和hobbbit |
|
. |
匹配除null之外的任意单个字符 |
hob.it 可以匹配hobait、hobbit等等 |
|
(pattern) |
匹配指定模式的一个子表达式。可以使用子表达式构成复杂的正则表达式。在这种子表达式中,可以访问单次的匹配,称为捕获(capture) |
anatom(y|ies) 可以匹配anatomy和 anatomies |
|
x|y |
匹配x或y,其中x和y是一个或多个字符 |
war|peace 可以匹配 war 或 peace |
|
[abc] |
匹配中括号内的任意一个字符 |
[ab]bc 可以匹配 abc 和 bbc |
|
[a-z] |
匹配指定范围内的任意一个字符 |
[a-c]bc 可以匹配 abc、bbc和cbc |
|
[: :] |
指定一个字符类,可以匹配该类中的任何字符 |
[:alphanum:] 可以匹配字符0-9、A-Z和a-z [:alpha:] 可以匹配字符A-Z和a-z [:blank:] 可以匹配空格或tab键 [:digit:] 可以匹配数字 0-9 [:graph:] 可以匹配非空字符 [:lower:] 可以匹配小写字母a-z [:print:] 与 [:graph:] 类似,不同之处在于[:print:] 包括空格字符 [:punct:] 可以匹配标点符号.,'''等等 [:space:] 可以匹配所有的空白字符 [:upper:] 可以匹配所有的大写字母A~Z [:xdigit:] 可以匹配十六进制数字 0~9、A~F和a~f |
|
[..] |
匹配一个组合元素,例如多字符元素 |
无 |
|
[==] |
指定等价类 |
无 |
|
\n |
这是对前一次捕获的一个反向引用,其中n是一个正整数 |
(.)\1 可以匹配两个连续相同的字符。(.)可以匹配除null之外的任何单个字符,而 \1 则重复上次匹配的内容,即再次匹配相同的字符,因此可以匹配两个连续相同的字符 |
元 字 符 |
含 义 |
\d |
数字字符 |
\D |
非数字字符 |
\w |
字母字符 |
\W |
非字母字符 |
\s |
空白字符 |
\S |
非空白字符 |
(续表)
元 字 符 |
含 义 |
\A |
只匹配字符串的开头位置 |
\Z |
只匹配字符串的末尾位置或者字符串末尾的换行符之前的位置 |
*? |
匹配前面的模式元素0次或多次 |
+? |
匹配前面的模式元素1次或多次 |
?? |
匹配前面的模式元素0次或1次 |
{n} |
匹配前面的模式元素恰好n次 |
{n,} |
匹配前面的模式元素至少n次 |
{n,m} |
匹配前面的模式元素至少n次,但不超过m次 |
函 数 |
说 明 |
REGEXP_LIKE( x,pattern [,match_option]) |
从x中搜索pattern参数中定义的正则表达式。可以使用match_option修改默认匹配选项,该参数可以被设置为: • 'c',说明在匹配时区分大小写(默认选项) • 'I',说明在匹配时不区分大小写 • 'n',允许使用可以匹配任意字符的操作符 • 'm',将x作为一个包含多行的字符串 |
REGEXP_INSTR( x,start [,occurrence [,return_option [,match_option [,subexp_option]]]]) |
在x中查找pattern,并返回pattern所在的位置。可以指定以下的可选参数: • start 开始查找的位置。默认值是1,指x的第一个字符。 • occurrence 说明应该返回第几次出现pattern的位置。默认值是1,这意味着函数返回pattern第一次在x中出现的位置。 • return_option 说明应该返回什么整数。若该参数为0,则说明要返回的整数是x中的第一个字符的位置;若该参数为非0的整数,则说明要返回的整数为x中出现在pattern之后的字符的位置 • match_option 修改默认的匹配设置,其工作方式与REGEXP_LIKEK()中指定的方式相同。 • subexp_option是Oracle Database 11g新增加的,其工作方式如下:对于具有子表达式的模式,subexp_option是0~9之间的一个非负数,指出pattern中的哪个子表达式是函数的目标。例如,考虑表达式0123(((abc)(de)f)ghi)45(678),此表达式有5个子表达式,分别是:"abcdefghi"、"abcdef"、"abc"、"de"和"678"。 |
(续表)
函 数 |
说 明 |
REGEXP_REPLACE(x,replace_string [,match_option]]]]) |
在x中查找pattern,并将其替换为replace_string。其他选项的意思与 REGEXP_INSTR()函数的参数完全相同 |
REGEXP_SUBSTR( x,subexp_option]]]]) |
返回x中可以匹配pattern的一个子字符串,其开始位置由start指定。其他选项的意思与 REGEXP_INSTR()函数的参数完全相同。Oracle Database 11g新增加的subexp_option其工作方式与REGEXP_INSTR()函数中相同 |
REGEXP_COUNT( x,match_option]])
|
这是Oracle Database 11g新增加的一个函数。在x中查找pattern,并返回pattern在x中出现的次数。可以提供以下两个可选参数: • start 开始查找的位置。默认值是1,指x的第一个字符。 • match_option 修改默认的匹配设置,其工作方式与REGEXP_LIKEK()中相同 |
SELECT customer_id,first_name,last_name,dob CUSTOMER_ID FIRST_NAME LAST_NAME DOB |
SELECT customer_id,dob CUSTOMER_ID FIRST_NAME LAST_NAME DOB |
SELECT RESULT |
SELECT RESULT |
SELECT RESULT |
SELECT RESULT |
SELECT RESUL |
SELECT RESULT |