Oracle学习笔记:正则表达式

发表于:2010-1-20 10:52

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

  Oracle 10g数据库内建了符合IEEE POSIX (Portable Operating System for Unix)标准的正则表达式。熟练使用正则表达式,可以写出简洁,强大的SQL语句。

  正则表达式有几个优点优于常见的LIKE操作符和INSTR、SUBSTR及REPLACE 函数的。这些传统的SQL 函数不便于进行模式匹配。只有LIKE 操作符通过使用%和_字符匹配,但LIKE不支持表达式的重复、复杂的更替、字符范围、字符列表和POSIX 字符类等等。

  元字符(Meta Character):

  Sql代码

  ^            使表达式定位至一行的开头
  $            使表达式定位至一行的末尾
  *            匹配 0 次或更多次
  ?            匹配 0 次或 1 次
  +            匹配 1 次或更多次
  {m}          正好匹配 m 次
  {m,}         至少匹配 m 次
  {m, n}       至少匹配 m 次但不超过 n 次
  [:alpha:]    字母字符
  [:lower:]    小写字母字符
  [:upper:]    大写字母字符
  [:digit:]    数字
  [:alnum:]    字母数字字符
  [:space:]    空白字符(禁止打印),如回车符、换行符、竖直制表符和换页符[:punct:]    标点字符
  [:cntrl:]    控制字符(禁止打印)
  [:print:]    可打印字符 | 分隔替换选项,通常与分组操作符 () 一起使用
  ( )          将子表达式分组为一个替换单元、量词单元或后向引用单元
  [char]       字符列表

  Oracle 10g提供了四个regexp function: REGEXP_LIKE , REGEXP_REPLACE , REGEXP_INSTR , REGEXP_SUBSTR 。

  Sql代码

  REGEXP_LIKE:比较一个字符串是否与正则表达式匹配
  (srcstr, pattern [, match_option])
  REGEXP_INSTR:在字符串中查找正则表达式,并且返回匹配的位置
  (srcstr, pattern [, position [, occurrence [, return_option [, match_option]]]])
  REGEXP_SUBSTR:返回与正则表达式匹配的子字符串
  (srcstr, pattern [, position [, occurrence [, match_option]]])
  REGEXP_REPLACE:搜索并且替换匹配的正则表达式
  (srcstr, pattern [, replacestr [, position [, occurrence [, match_option]]]])

  其中各参数的含义为:

  Sql代码

  srcstr:        被查找的字符数据。
  pattern:       正则表达式。
  occurrence:    出现的次数。默认为1。
  position:      开始位置
  return_option: 默认值为0,返回该模式的起始位置;值为1则返回符合匹配条件的下一个字符的起始位置。
  replacestr:    用来替换匹配模式的字符串。
  match_option:  匹配方式选项。缺省为c。
  c:case sensitive
  I:case insensitive
  n:(.)匹配任何字符(包括newline)
  m:字符串存在换行的时候被作为多行处理

  下面通过一些具体的例子来说明如何使用这四个函数。首先创建一个测试数据表,

  Sql代码

  SQL> create table person (
  2  first_name varchar(20),
  3  last_name varchar(20),
  4  email varchar(100),
  5  zip varchar(6));
  Table created.
  SQL> insert into person values ('Steven', 'Chen', 'steven@hp.com', '123456');
  1 row created.
  SQL> insert into person values ('James', 'Li', 'jamesli@sun.com' || chr(10) || 'lijames@oracle.com', '1b3d5f');
  1 row created.
  SQL> commit;
  Commit complete.
  SQL> select * from person;
  FIRST_NAME LAST_NAME  EMAIL                ZIP
  ---------- ---------- -------------------- ------
  Steven     Chen       steven@hp.com        123456
  James      Li         jamesli@sun.com      1b3d5f
                        lijames@oracle.com

31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号