讲述oracle中的正则表达式函数

oracle中的正则表达式函数 介绍[@more@]

正则表达式在各种编程语言中有着广泛的应用。这里主要介绍Oracle中的正则表达式函数。内容有:

1)正则表达式基础知识

2)Oracle中的正则表达式函数

正则表达式基础知识

1、正则表达式定义

正则表达式就是以某种模式来匹配一类字符。一旦匹配正则表达式就提供了处理字符串的快捷方式。

2、正则表达式与通配符区别

相同点:正则表达式和通配符都可以看做是模糊的字符串匹配

不同之处:正则表达式除了可以代表模糊字符的特殊字符外还存在着量词等修饰符使得模式控制更加灵活和强大

而通配符只在特殊查询情况下使用,并且平台不同通配符也可能不同,在这方面正则表达式去保持语法的高度一致。

3、正则表达式的元字符和普通字符

正则表达式是以字符为基本单位的。这些字符也可以分为保留字符与普通字符两类,也可成为 元字符和普通字符。

元字符:是指在正则表达式中表示特殊含义的字符。包括

“.”、“左斜杠”、“?”、“*”、“+”、“|”、“{”、“}”、“^”、“$”、“[”、“]”

'^' 匹配输入字符串的开始位置,在方括号表达式中使用,此时表示不接受该字符集合。
'$' 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 'n' 或 'r'。
'.' 匹配除换行符之外的任何单字符。
'?' 匹配前面的子表达式零次或一次。

'|' 指明两项之间的一个选择。例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成

字符串。
'( )' 标记一个子表达式的开始和结束位置。
'[]' 标记一个中括号表达式。

'{m,n}' 一个精确地出现次数范围,m=num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。

普通字符:是指除了元字符以外的Unicode字符。

4、量词

量词用来指定量词的前一个字符出现的次数。包含:“?”、“*”、“+”、“{}”。

a)元字符“?”作为量词出现,用来匹配0个或1个字符。例如A?,表示0个或1个字符“A”。

b)元字符“*”作为量词出现,用来匹配0个或多个字符。例如A*,表示0个或多个字符“A”。

c)元字符“{”和“}”同时出现,用来匹配指定个数的字符,其形式有三种情况:A{3}表示匹配三个字符“A”;A{3,}表示匹配三个或更多个字符“A”;A{3,5}表示匹配3到5个字符“A”。

d) 量词在用于匹配字符串时,默认遵循贪婪原则。贪婪原则是指,尽可能多地匹配字符。例如字符串“Function(p),(OK)”,如果使用正则表达式“(.*)”进行匹配,则得到字符串“(p),(OK)” ,而非“(p)”;若欲得到“(p)”,则必须取消量词的贪婪原则,此时只需要为量词后追加另外一个数量词“?”即可。如上面的正则表达式应该改为“(.*?)”。

5、字符转义与字符类

字符转义:用“左斜杠”与其他字符进行组合。“其他字符”包含元字符和普通字符。

元字符在正则表达式中有特殊含义。如果需要使用其原义,则需要字符转义。用法:转义字符+元字符

例如,“左斜杠.”表示普通字符“.”; “左斜杠.doc”匹配字符串“.doc”;而普通字符“左斜杠”需要使用“2个左斜杠”来表示。

6、字符组的使用

字符组是指将模式中的某些部分作为一个整体。这样,量词可以来修饰字符组,从而提高正则表达式的灵活性。例如,使用元字符和普通字符的组合,很难针对字符串“abc123abc123abc123”来归纳正则表达式。此时可以利
用字符组来实现,相应的正则表达式可以表示为
“(abc123)+”,表示连续的多个“abc123”组合。

7、“|”的使用

可以利用“|”来创建多个正则表达式分支。例如,“d{4}|w{4}”可以看做两个正则表达式——“d{4}”和“w{4}”,匹配其中任何一个正则表达式的字符串都被认为匹配整个正则表达式。如果该字符串两个正则表达式分支都匹配,那么将被处理为匹配第一个正则表达式分支。

8、正则表达式的特殊性

特殊语法:
[[:alpha:]]:表示任意字母

[[:digit:]]:表示任意数字

[[:lower:]]:表示任意小写字母。

[[:alnum:]]:表示任意字母和数字。

[[:space:]]:表示任意空白字符

[[:upper:]]:表示任意大写字母。

[[:punct:]]:表示任意标点符号。

[[:xdigit:]]:表示任意16进制的数字,相当于[0-9a-fA-
F]。

9、各种操作符的运算优先级


转义符
(), (?:), (?=), [] 圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, anymetacharacter 位置和顺序

Oracle中的正则表达式函数

Oracle 10g及以后的版本都提供了对正则表达式的支持。主要是通过提供函数来体现的。

REGEXP_LIKE() :与LIKE 的功能相似
REGEXP_INSTR() :与INSTR 的功能相似
REGEXP_SUBSTR() :与SUBSTR 的功能相似
REGEXP_REPLACE() :与REPLACE 的功能相似

1、REGEXP_LIKE()

regexp_like(expression, regexp)。其中第一个参数为字
符串,可以是数据表中的列或者表达式获得的字符串;第
个参数也是一个字符串,该参数用于表示进行匹配的正则
达式。函数的返回值为一个布尔值。如果第一个参数匹配
二个参数所代表的正则表达式,那么将返回真,否则将返
假。

select * from people where regexp_like(name, '^J.*$');
select * from people where name like 'J%';

2、REGEXP_INSTR()

regexp_instr(expression, regexp, startindex, times)。
其中,第一个参数expression为字符串,可以是表中的列
或者字符串表达式;第二个参数regexp为字符串,表示要
进行匹配的正则表达式;第三个参数startindex表示开始
行匹配比较的位置;第四个参数表示第几次匹配作为最终
配结果。其中第三个和第四个参数为可选参数,默认值均
1。该函数用于获得正确匹配时,指针在字符串expressi
中的位置。
select regexp_instr('12.158', '5') position from dual;

regexp_instr('12.158', '5')用于获取第一个字符5的位置。

3、REGEXP_SUBSTR()

regexp_substr(expression, regexp)。该函数的第一个参数为
字符串,可以是表中的列或者字符串表达式;第二个参数为正则表达式。该函数用于返回第一个字符串参数中,与第二个正则表达式参数相匹配的子字符串。
create table html(id integer, html varchar2(2000));
insert into html values (1, 'mail">http://mail.google.com/2009/1009.html">mail
link');
表html中存储了HTML标签及内容。现欲从标签中获得
链接的url,那么可以利用regexp_substr()函数。

select id, regexp_substr(html, 'http[a-zA-Z0-9转义字符.:/]*') url
from html;

4、REGEXP_REPLACE()

regexp_replace(expression, regexp, replacement)。其中,第一个参数expression为字符串类型,可以是表中的列或者字符串;第二个参数regexp为一个字符串,是用来进行匹配操作的正则表达式;第三个参数replacement是一个字符串,该字符串用于替换expression中的匹配部分。

值得注意的是,在参数replacement中,可以含有后向引用,以便将正则表达式中的字符组重新捕获。例如,某些国家和地区的日期格式可能为“MM/DD/YYYY”,那么可以利用regexp_replace()函数来转换日期格式。
select regexp_replace('09/29/2008', '^([0-9]{2})/([0-9]{2})/([0-9]{4})$', '转义字符3-转义字符1-转义字符2') replace from dual;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25101849/viewspace-1057652/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25101849/viewspace-1057652/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值