Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103635949
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-04-03 23:06:30

作者:builder.com.com 来源:

Oracle 10g Release 1为了与文本字符串中的模式相匹配,添加了对POSIX正则表达式的支持。Release 2用一些附加的可以在Perl找到的元字符,扩充了最初的模式元字符目录。如果你正在用Oracle 10gR2开发脚本,那么就看看本文里这些搜索文本的有效捷径。

首先,简短概述一下:函数REGEXP_LIKE针对一种模式搜索一个字符列,返回一个TRUE或FALSE的逻辑值。你可以在SQL SELECT语句的WHERE子句中用它来限定行数,或者在PL/SQL块中检查数据的有效性。相似的函数——REGEXP_REPLACE、REGEXP_SUBSTR和REGEXP_INSTR——都能够在执行其他常见的字符串操作时,接受POSIX正则表达式。

Perl为POSIX“类”表达式添加了一些简短的模式。例如,在标准的POSIX正则表达式中,你用符号‘[[:digit:]]’来表示一个从0到9的阿拉伯数字。在Perl中,它被简化成‘d’。大括号表示一次重复计数,因此,‘d’规定了三个阿拉伯数字。要表示你想要一个除阿拉伯数字之外的字符,POSIX模式是‘[^[:digit:]]’。但是在Perl中,它只表示为‘D’。

类似的捷径对于空白也存在:‘s’与‘[[:space:]]’相对应,非空白:‘S’对应‘[^[:space:]]’。列表A中显示了一个取自人力资源方案的例子。

Perl通过对运算符添加(?),用“非贪婪型”匹配运算符扩充了POSIX中的“贪婪型”匹配运算符。例如,符号‘^0’与至少两个0最多五个0开头的值相匹配。但是,解释是“贪婪的”,它尽可能地与最长的字符串相匹配。如果列中包括了“000000”,这种符号将与前五个0匹配。但是,符号“^0?”是“非贪婪的”,它与最短的字符串匹配,这样,就只有两个0了。列表B中是一个利用REGEXP_SUBSTR的例子。

阅读(349) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~