




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第21章 Oracle中的正则表达式,在各种编程语言中,正则表达式都有着广泛的应用。Oracle 10g及以后的版本中也支持正则表达式,并提供了非常实用的函数。本章首先讲述正则表达式的基本知识,最后讲述Oracle中的正则表达式函数。本章的主要内容包括: 正则表达式基础知识; Oracle中的正则表达式函数。,21.1 正则表达式简介,正则表达式,就是以某种模式来匹配一类字符串。一旦概括了某类字符串,那么正则表达式即可用于针对字符串的各种相关操作。例如,判断匹配性,进行字符串的重新组合等。正则表达式提供了字符串处理的快捷方式。,22.1.1 正则表达式与通配符,正则表达式是一个模式,正则表达式可以看做一个模糊的字符串匹配;而通配符也可以看做模糊的字符串匹配。 正则表达式与通配符虽有相似之处,但却有着本质的区别。正则表达式中不仅存在着代表模糊字符的特殊字符,而且存在着量词等修饰字符,使得模式的控制更加灵活和强大。另外,通配符的使用一般是在特定的环境下,例如Windows的查询功能等,在不同的环境下,通配符有可能不同。而正则表达式,不但广泛应用于各种编程语言,而且在各种编程语言中,保持了语法的高度一致性。,22.1.2 正则表达式与编程语言,在各种编程语言中,可以说,正则表达式是无处不在的。正则表达式在各种编程语言中高度统一,都遵循一致的语法。因此,一旦熟悉了一种编程语言中的正则表达式,那么,可以直接应用于其他编程语言。编程语言同时也是正则表达式的载体,没有编程语言,正则表达式的作用将无从发印,21.2 正则表达式基础知识,正则表达式简单易学。本节将从以下几方面讲述正则表达式的基础知识。 元字符和普通字符; 量词; 字符转义与字符类; 字符组; 正则表达式分支。,21.2.1 元字符和普通字符,编程语言与普通文本文件的区别在于,编程语言中定义了保留字。这些保留字,都被编译器当做特殊命令来处理。其余才被当做普通字符串进行处理。 正则表达式的定义是以字符为基本单位的。这些字符也可以分为“保留字符”与普通字符两类,分别称为元字符和普通字符。元字符是指在正则表达式中表示特殊含义的字符。正则表达式中的元字符包括“.”、“”、“?”、“*”、“+”、“|”、“” 、“”、“”、“$”、“”、“”。 例如,元字符中的“.”用于匹配任何单字符(换行符除外);“” 可以与普通字符组合来表示特殊字符,也可与元字符组合使用来获得元字符的原义字符。元字符“”和“$”用于匹配输入字符串的开始和结束。默认情况下,这里的开始和结束是指整个字符串的开头和结尾。 普通字符是指除元字符外的所有Unicode字符。普通字符匹配其本身。例如,字符“a”代表原义字符“a”。,21.2.2 量词,量词用来指定量词的前一个字符出现的次数。量词的形式主要有“?”、“*”、“+”、“”。 元字符“?”作为量词出现,用来匹配0个或1个字符。例如A?,表示0个或1个字符“A”。 元字符“*”作为量词出现,用来匹配0个或多个字符。例如A*,表示0个或多个字符“A”。 元字符“”和“”同时出现,用来匹配指定个数的字符,其形式有三种情况:A3表示匹配三个字符“A”;A3,表示匹配三个或更多个字符“A”;A3,5表示匹配3到5个字符“A”。 量词在用于匹配字符串时,默认遵循贪婪原则。贪婪原则是指,尽可能多地匹配字符。例如字符串“Function(p),(OK)”,如果使用正则表达式“(.*)”进行匹配,则得到字符串“(p),(OK)” ,而非“(p)”;若欲得到“(p)”,则必须取消量词的贪婪原则,此时只需要为量词后追加另外一个数量词“?”即可。如上面的正则表达式应该改为“(.*?)”。,21.2.3 字符转义与字符类,字符转义是指通过元字符“”与其他字符进行组合。这里的“其他字符”包括了元字符和普通字符。 元字符在正则表达式中有特殊含义。如果需要使用其原义,则需要用到字符转义。字符转义使用字符“”来实现。其语法模式为:“”+元字符。例如,“.”表示普通字符“.”; “.doc”匹配字符串“.doc”;而普通字符“”需要使用“”来表示。,21.2.4 字符组的使用,字符组是指将模式中的某些部分作为一个整体。这样,量词可以来修饰字符组,从而提高正则表达式的灵活性。例如,使用元字符和普通字符的组合,很难针对字符串“abc123abc123abc123”来归纳正则表达式。此时可以利用字符组来实现,相应的正则表达式可以表示为“(abc123)+”,表示连续的多个“abc123”组合。 字符组的另一个重要作用在于,许多编程语言中,可以利用“$1”、“$2”等来获取第一个、第二个字符组,即所谓的后向引用。在Oracle中,引用格式为“1”、“2”。,21.2.5 正则表达式分支,可以利用“|”来创建多个正则表达式分支。例如,“d4|w4”可以看做两个正则表达式“d4”和“w4”,匹配其中任何一个正则表达式的字符串都被认为匹配整个正则表达式。如果该字符串两个正则表达式分支都匹配,那么将被处理为匹配第一个正则表达式分支。,21.2.6 Oracle中正则表达式的特殊性,在Oracle中,正则表达式的用法与标准用法略有不同。这种不同主要体现在对于字符类的定义上。Orale中不使用字符“”与普通字符组合的形式来实现字符类,而是具有其特殊语法: :alpha::表示任意字母,正则表达式的一般语法为w。 :digit::表示任意数字,正则表达式的一般语法为d。 :lower::表示任意小写字母。,21.2.6 Oracle中正则表达式的特殊性,:alnum::表示任意字母和数字。 :space::表示任意空白字符,正则表达式的一般语法为s。 :upper::表示任意大写字母。 :punct::表示任意标点符号。 :xdigit::表示任意16进制的数字,相当于0-9a-fA-F。,21.3 正则表达式在Oracle中的应用,Oracle 10g及以后的版本都提供了对正则表达式的支持。而这种支持,主要是通过提供函数来体现的。Oracle中共有四个正则表达式相关函数,它们分别是: regexp_like() regexp_instr() regexp_substr() regexp_replace(),21.3.1 regexp_like()的使用,regexp_like()函数的常用形式为regexp_like(expression, regexp)。其中第一个参数为字符串,可以是数据表中的列或者表达式获得的字符串;第二个参数也是一个字符串,该参数用于表示进行匹配的正则表达式。函数的返回值为一个布尔值。如果第一个参数匹配第二个参数所代表的正则表达式,那么将返回真,否则将返回假。 select * from people where regexp_like(name, J.*$); select * from people where name like J%;,21.3.2 regexp_ instr ()的使用,regexp_instr()函数的常用形式为regexp_instr(expression, regexp, startindex, times)。其中,第一个参数expression为字符串,可以是表中的列或者字符串表达式;第二个参数regexp为字符串,表示要进行匹配的正则表达式;第三个参数startindex表示开始进行匹配比较的位置;第四个参数表示第几次匹配作为最终匹配结果。其中第三个和第四个参数为可选参数,默认值均为1。该函数用于获得正确匹配时,指针在字符串expression中的位置。 select regexp_instr(12.158, .) position from dual; regexp_instr(12.158, .)用于获取第一个小数点的位置。正则表达式“.”表示普通字符“.”,21.3.3 regexp_substr ()的使用,regexp_substr()函数的常用形式为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, httpa-zA-Z0-9.:/*) url from html;,21.3.4 regexp_ replace ()的使用,regexp_replace()函数的常用形式为regexp_replace(expression, regexp, replacement)。其中,第一个参数expression为字符串类型,可以是表中的列或者字符串;第二个参数regexp为一个字符串,是用来进行匹配操作的正则表达式;第三个参数replacement是一个字符串,该字符串用于替换expression中的匹配部分。 值得注意的是,在参数replacement中,可以含有后向引用,以便将正则表达式中的字符组重新捕获。例如,某些国家和地区的日期格式可能为“MM/DD/YYYY”,那么可以利用regexp_replace()函数来转换日期格式。 select regexp_replace(09/29/2008, (0-92)/(0-92)/(0-94)$, 3-1-2) replace from dual;,21.4 本章实例,在进行正则表达式匹配时,还可以忽略字符大小写形式进行匹配。这是比使用LIKE判式更加灵活和方便之处。 select * from people where regexp_like(name, or); select * from people where regexp_like(name, or, i);,21.5 本章小结,本章讲述了正则表达式的基本知识。正则表达式语法在各种编程语言中具有高度的一致
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年《试验检测师》考试题库含答案(考试直接用)
- 商业银行金融科技人才培养策略报告:2025年金融科技人才创新思维培养
- 基于2025年教育游戏化儿童批判性思维训练实践创新教育教学设计实践报告
- 智能化技术在2025年城市污水处理厂改造中的智能化改造技术方案报告
- 2025年环保设备制造业市场潜力分析与产品创新模式创新报告
- 2025年环保产业技术创新成果分析与产业升级路径研究报告001
- 2025年教育游戏化在儿童教育中的教学评价创新报告
- 手机配件培训
- DR常规体位操作技术
- 医院医保协议培训课件
- 2024年 黄冈市法院系统招聘审判辅助人员考试真题试题含答案
- 荆州中学2024-2025学年高二下学期6月月考历史试题答案
- 公司消防网格化管理制度
- 外科换药拆线技术规范
- 2025至2030中国氧化铝纤维行业供需趋势及投资风险报告
- 2025年四川泸州市中考数学试卷真题及答案详解(精校打印)
- 2025年中考考前最后一卷化学(武汉卷)(全解全析)
- 2026届高考语文复习:直击2025年语文高考阅读客观题关键词比对
- 电子政务概论-形考任务5(在线测试权重20%)-国开-参考资料
- 19S406建筑排水管道安装-塑料管道
- 国家开放大学《病理生理学》形考任务1-4参考答案
评论
0/150
提交评论