ORACLE 正则表达式摘录笔记

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ORACLE 正则表达式

一.正则表达式简介:

正则表达式,就是以某种模式来匹配一类字符串。一旦概括了某类字符串,那么正则表达式即可用于针对字符串的各种相关操作。例如,判断匹配性,进行字符串的重新组合等。正则表达式提供了字符串处理的快捷方式。Oracle 10g及以后的版本中也支持正则表达式.

二. 正则表达式相对通配符的优势:

1.正则表达式中不仅存在着代表模糊字符的特殊字符,而且存在着量词等修饰

字符,使得模式的控制更加灵活和强大。

2.通配符的使用一般是在特定的环境下,不同的环境下,通配符有可能不同。

而正则表达式,不但广泛应用于各种编程语言,而且在各种编程语言中,保持了语法的高度一致性。

三. 元字符:

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

量词用来指定量词的前一个字符出现的次数。量词的形式主要有“?”、“*”、“+”、“{}”。量词在用于匹配字符串时,默认遵循贪婪原则。贪婪原则是指,尽可能多地匹配字符。例如:字符串“Function(p),(OK)”,如果使用正则表达式“\(.*\)”进行匹配,则得到字符串“(p),(OK)” ,而非“(p)”;若欲得到“(p)”,则必须取消量词的贪

婪原则,此时只需要为量词后追加另外一个数量词“?”即可。如上面的正则表达式应该改为“\(.*?\)”。

五. 字符转义:

元字符在正则表达式中有特殊含义。如果需要使用其原义,则需要用到字符转义。字符转义使用字符“\”来实现。其语法模式为:“\”+元字符。例如,“\.”表示普通字符“.”;“\.doc”匹配字符串“.doc”;而普通字符“\”需要使用“\\”来表示。

六. 字符组.

字符组是指将模式中的某些部分作为一个整体。这样,量词可以来修饰字符组,从而提高正则表达式的灵活性。字符组通过()来实现.

许多编程语言中,可以利用“$1”、“$2”等来获取第一个、第二个字符组,即所谓的后向引用。在Oracle中,引用格式为“\1”、“\2”。

七. 正则表达式分支

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

八. 字符类.

在Oracle中,正则表达式的用法与标准用法略有不同。这种不同主要体现在对于字符类的定义上。Orale中不使用字符“\”与普通字符组合的形式来实现字符

九. ORACLE中的四个正则表达式相关函数.

1.regexp_like(expression, regexp)

返回值为一个布尔值。如果第一个参数匹配第二个参数所代表的正则表达式,那么将返回真,否则将返回假。

举例:select * from people where regexp_like(name, '^J.*$');

相当于: select * from people where name like 'J%';

2.regexp_instr(expression, regexp, startindex, times)

返回找到的匹配字符串的位置.

参数startindex表示开始进行匹配比较的位置;参数times表示第几次匹配作为最终匹配结果。

举例:select regexp_instr('12.158', '\.') position from dual;

regexp_instr('12.158', '\.')用于获取第一个小数点的位置。

3.regexp_substr(expression, regexp)

返回第一个字符串参数中,与第二个正则表达式参数相匹配的子字符串。

举例: create table html(id integer, html varchar2(2000));

insert into html

values (1, 'mail

link');

表html中存储了HTML标签及内容。现欲从标签中获得链接的url,那么可以利用regexp_substr()函数。

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

4. regexp_replace(expression, regexp, replacement)

将expression中的按regexp匹配到的部分用replacement代替.

在参数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;

注: 在进行正则表达式匹配时,还可以忽略字符大小写形式进行匹配.但是不能解除[[:upper:]]和[[:lower:]]的作用.

select * from people where regexp_like(name, 'or');

select * from people where regexp_like(name, 'or', 'i'); --…i‟表示忽略大小写

十. 正则表达式练习

第一:REGEXP_LIKE函数用法

EMP表结构如下:

SQL> desc emp;

Name Null? Type

----------------------------------------- -------- ----------------------------

EMPNO NOT NULL NUMBER(4) ENAME

VARCHAR2(10)

JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATE

SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2)

相关文档
最新文档