设为首页 收藏本站
查看: 875|回复: 0

[经验分享] Oracle正则

[复制链接]
发表于 2018-9-12 06:49:41 | 显示全部楼层 |阅读模式
  1.
  REGEXP_SUBSTR
  REGEXP_SUBSTR 函数使用正则表达式来指定返回串的起点和终点,返回与source_string 字符集中的VARCHAR2 或CLOB 数据相同的字符串。
  语法:
  --1.REGEXP_SUBSTR与SUBSTR函数相同,返回截取的子字符串
  REGEXP_SUBSTR(srcstr, pattern [, position [, occurrence [, match_option]]])
  注:
  srcstr
  源字符串
  pattern
  正则表达式样式
  position
  开始匹配字符位置
  occurrence
  匹配出现次数
  match_option
  匹配选项(区分大小写)
  1.1从字符串中截取子字符串
  SELECT regexp_substr('1PSN/231_3253/ABc', '[[:alnum:]]+') FROM dual;
  Output: 1PSN
  [[:alnum:]]+ 表示匹配1个或者多个字母或数字字符。
  SELECT regexp_substr('1PSN/231_3253/ABc', '[[:alnum:]]+', 1, 2) FROM dual;
  Output: 231
  与上面一个例子相比,多了两个参数
  1
  表示从源字符串的第一个字符开始查找匹配
  2
  表示第2次匹配到的字符串(默认值是“1”,如上例)
  select regexp_substr('@@/231_3253/ABc','@*[[:alnum:]]+') from dual;
  Output: 231
  @* 表示匹配0个或者多个@
  [[:alnum:]]+ 表示匹配1个或者多个字母或数字字符
  注意:需要注意“+”和“*”的区别
  select regexp_substr('1@/231_3253/ABc','@+[[:alnum:]]*') from dual;
  Output: @
  @+ 表示匹配1个或者多个@
  [[:alnum:]]* 表示匹配0个或者多个字母或数字字符
  select regexp_substr('1@/231_3253/ABc','@+[[:alnum:]]+') from dual;
  Output: Null
  @+ 表示匹配1个或者多个@
  [[:alnum:]]+ 表示匹配1个或者多个字母或数字字符
  select regexp_substr('@1PSN/231_3253/ABc125','[[:digit:]]+$') from dual;
  Output: 125
  [[:digit:]]+$ 表示匹配1个或者多个数字结尾的字符
  select regexp_substr('@1PSN/231_3253/ABc','[^[:digit:]]+$') from dual;
  Output: /ABc
  [^[:digit:]]+$ 表示匹配1个或者多个不是数字结尾的字符
  select regexp_substr('Tom_Kyte@oracle.com','[^@]+') from dual;
  Output: Tom_Kyte
  [^@]+ 表示匹配1个或者多个不是“@”的字符
  select regexp_substr('1PSN/231_3253/ABc','[[:alnum:]]*',1,2)
  from dual;
  Output: Null
  [[:alnum:]]* 表示匹配0个或者多个字母或者数字字符
  注:因为是匹配0个或者多个,所以这里第2次匹配的是“/”(匹配了0次),而不是“231”,所以结果是“Null”
  1.2匹配重复出现
  查找连续2个小写字母
  SELECT regexp_substr('Republicc Of Africaa', '([a-z])1', 1, 1, 'i')
  FROM dual;
  Output: cc
  ([a-z])
  表示小写字母a-z
  1
  表示匹配前面的字符的连续次数
  1
  表示从源字符串的第1个字符开始匹配
  1
  第1次出现符合匹配结果的字符
  i
  表示区分大小写
  1.3其他一些匹配样式
  查找网页地址信息
  SELECT regexp_substr('Go to http://www.oracle.com/products and click on database', 'http://([[:alnum:]]+.?){3,4}/?') RESULT
  FROM dual
  Output: http://www.oracle.com
  其中:
  http://
  表示匹配字符串“http://”
  ([[:alnum:]]+.?)   表示匹配1次或者多次字母或数字字符,紧跟0次或1次逗号符
  {3,4}
  表示匹配前面的字符最少3次,最多4次
  /?
  表示匹配一个反斜杠字符0次或者1次
  提取csv字符串中的第三个值
  SELECT regexp_substr('1101,Yokohama,Japan,1.5.105', '[^,]+', 1, 3) AS output
  FROM dual;
  Output: Japan
  其中:
  [^,]+
  表示匹配1个或者多个不是逗号的字符
  1
  表示从源字符串的第一个字符开始查找匹配
  3
  表示第3次匹配到的字符串
  注:这个通常用来实现字符串的列传行
  --字符串的列传行
  SELECT regexp_substr('1101,Yokohama,Japan,1.5.105', '[^,]+', 1, LEVEL) AS output
  FROM dual
  CONNECT BY LEVEL

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-573040-1-1.html 上篇帖子: Redhat Enterprise 6 下安装Oracle 11g报错 下篇帖子: Oracle8i 到Oracle 12c的2014年最新PSU、Bundle Patch、SPU信息
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表