Oracle 10g 正则表达式

来源:互联网 发布:毯子知乎 编辑:程序博客网 时间:2024/06/07 00:42

ORACLE终于在10G中提供了对正则表达式的支持,以前那些需要通过LIKE来进行的复杂的匹配就可以通过使用正则表达式更简单的实现。

Oracle 10g正则表达式提高了SQL灵活性。有效的解决了数据有效性, 重复词的辨认无关的空白检测,或者分解多个正则组成的字符串等问题。

Oracle 10g支持正则表达式的四个新函数分别,它们使用POSIX 正则表达式代替了老的百分号(%)和通配符(_)字符。

1,  REGEXP_LIKE :与LIKE的功能相似

2,  REGEXP_INSTR :与INSTR的功能相似 : 返回字符的个数

3REGEXP_SUBSTR :与SUBSTR的功能相似 : 截取字符串

4REGEXP_REPLACE :与REPLACE的功能相似

在新的函数中使用正则表达式来代替通配符‘%’‘_’

正则表达式由标准的元字符(metacharacters)所构成:

'^' 匹配输入字符串的开始位置在方括号表达式中使用,此时它表示不接受该字符集合。

'$' 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 也匹配 'n' 或 'r'

'.' 匹配除换行符 n之外的任何单字符。

'?' 匹配前面的子表达式零次或一次。

'+' 匹配前面的子表达式一次或多次。

'*' 匹配前面的子表达式零次或多次。

'|' 指明两项之间的一个选择。例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的字符串。

'( )' 标记一个子表达式的开始和结束位置。

'[]' 标记一个中括号表达式。

'{m,n}' 一个精确地出现次数范围,m=<出现次数<=n'{m}'表示出现m次,'{m,}'表示至少出现m次。

num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。

字符簇: 

[[:alpha:]] 任何字母。

[[:digit:]] 任何数字。

[[:alnum:]] 任何字母和数字。

[[:space:]] 任何白字符。

[[:upper:]] 任何大写字母。

[[:lower:]] 任何小写字母。

[[:punct:]] 任何标点符号。

[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]

各种操作符的运算优先级

1. 转义符

2. (), (?:), (?=), [] 圆括号和方括号

3. *, +, ?, {n}, {n,}, {n,m} 限定符

4. ^, $, anymetacharacter 位置和顺序

4. | “操作

示例:

一、REGEXP_LIKE

/* Formatted on 2009/11/11 19:03 (Formatter Plus v4.8.8) */

SELECT *

  FROM scott.emp

 WHERE REGEXP_LIKE (ename, '^a{1,3}');

SELECT *

  FROM scott.emp

 WHERE REGEXP_LIKE (ename, 'a{1,2}');

SELECT *

  FROM scott.emp

 WHERE REGEXP_LIKE (ename, '^a.*e$');

SELECT *

  FROM scott.emp

 WHERE REGEXP_LIKE (ename, '^[[:lower:]]|[[:digit:]]');

SELECT *

  FROM scott.emp

 WHERE REGEXP_LIKE (ename, '^[[:lower:]]');

SELECT sal

  FROM scott.emp

 WHERE REGEXP_LIKE (sal, '[^[:digit:]]');

SELECT sal

  FROM scott.emp

 WHERE REGEXP_LIKE (sal, '^[^[:digit:]]');

二、REGEXP_INSTR

/* Formatted on 2009/11/11 19:03 (Formatter Plus v4.8.8) */

SELECT REGEXP_INSTR (ename, '[[:digit:]]$')

  FROM scott.emp;

SELECT REGEXP_INSTR (mc, '[[:digit:]]+$')

  FROM scott.emp;

SELECT REGEXP_INSTR ('The price is $400.', '$[[:digit:]]+')

  FROM DUAL;

SELECT REGEXP_INSTR ('onetwothree', '[^[[:lower:]]]')

  FROM DUAL;

SELECT REGEXP_INSTR (',,,,,', '[^,]*')

  FROM DUAL;

SELECT REGEXP_INSTR (',,,,,', '[^,]')

  FROM DUAL;

三、REGEXP_SUBSTR

/* Formatted on 2009/11/11 19:04 (Formatter Plus v4.8.8) */

SELECT REGEXP_SUBSTR (ename, '[a-z]+')

  FROM scott.emp;

SELECT REGEXP_SUBSTR (sal, '[0-9]+')

  FROM scott.emp;

SELECT REGEXP_SUBSTR ('aababcde', '^a.*b')

  FROM DUAL;

四、REGEXP_REPLACE

/* Formatted on 2009/11/11 19:06 (Formatter Plus v4.8.8) */

SELECT REGEXP_REPLACE ('Joe Smith', '(){2,}', ',') AS rx_replace

  FROM DUAL;

SELECT REGEXP_REPLACE ('aa bb cc', '(.*) (.*) (.*)', '3, 2, 1')

  FROM DUAL;

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 代购买的东西被海关扣了怎么办 托朋友代购给了钱联系不上人怎么办 签了合同被加盟商骗了怎么办 百度云盘下载时本地空间不足怎么办 百度云盘隐私空间没密码忘了怎么办 华为云空间的帐号密码忘记了怎么办 快递被快递公司弄丢了怎么办 快递到了人不在那个地方了怎么办 微信被骗了1千多怎么办 客户货已经用啦要求退款退货怎么办 网购收到别人退货的东西怎么办 好省输入订单编号查不到订单怎么办 快递没有当面验收后发现损坏怎么办 支付宝电脑付款风控异常怎么办 京东买东西地址填错了怎么办 商场卖的衣服跟官网差价大怎么办 网购的衣服有好几个破洞怎么办 出租发票有牌号是假的怎么办 支付宝里的多收多保被降级了怎么办 超市购物卡余额与实际不符怎么办 发广告的公众号无法取消关注怎么办 扣扣需要手机验证码登录怎么办 驾校报了联系不了教练了怎么办 手机号被别人注册了百度网盘怎么办 注册公司云证书申请成功后怎么办 淘宝购物卖家迟迟不发货怎么办 淘宝直播顾客加购物车不下单怎么办 东方航空联程机票航班延误怎么办 别别人伸请更换手机绑定qq怎么办 绑定手机号的扣扣忘记密码怎么办 微信公众号个人主体变更公司怎么办 微信号注册成订阅号了怎么办 微信开通了企鹅影院会员怎么办 注销公众号对公账号填写错误怎么办 国外邮的东西在北京扣了手续怎么办 微信购物商城买的东西不发货怎么办 魅族手机电话图标没有了怎么办 新商盟网页新商盟网页打不开怎么办 京东商城购物车装满了怎么办 商家想入住美团没有营业执照怎么办 旅行团定好的人数临时加人该怎么办