分类: Oracle
2008-04-03 23:06:30
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的例子。