数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

Oracle10gR2中用正则表达式搜索文本


发布日期:2019年02月16日
 
Oracle10gR2中用正则表达式搜索文本
Oracle g Release 为了与文本字符串中的模式相匹配添加了对POSIX正则表达式的支持Release 用一些附加的可以在Perl找到的元字符扩充了最初的模式元字符目录如果你正在用Oracle gR开发脚本那么就看看本文里这些搜索文本的有效捷径

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

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

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

SQL> SELECT last_nameFROM employeesWHERE REGEXP_LIKE(last_name [[:space:]]);

LAST_NAME

De Haan

SQL> SELECT last_nameFROM employeesWHERE REGEXP_LIKE (last_name \s);

LAST_NAME

De Haan

SQL> SELECT last_nameFROM employeesWHERE REGEXP_LIKE (last_name \S)AND ROWNUM < ;

LAST_NAME

AbelAnde

Atkinson

Austin

BaerBaida

Banda

Bates

Bell

Bernstein

rows selected

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


列表B

SQL> CREATE TABLE testtab (x VARCHAR());

Table created

SQL> BEGIN

FOR i IN LOOP

INSERT INTO testtab VALUES (LPAD(i));

END LOOP;

END;

/

PL/SQL procedure successfully completed

SQL> SELECT x FROM testtab;

X

rows selected

SQL> SELECT REGEXP_SUBSTR(x ^{})

FROM testtab;

REGEXP_SUB

rows selected

SQL> SELECT REGEXP_SUBSTR(x ^{}?)

FROM testtab;

REGEXP_SUB

rows selected

               

上一篇:通过JDBC连接oracle数据库的技巧

下一篇:Oracle中日期时间的操作比较和加减