本篇文章主要介绍了" Oracle中的正则表达式及函数详解",主要涉及到方面的内容,对于Oracle感兴趣的同学可以参考一下:
转载请注明出处:http://blog.csdn.net/anxpp/article/details/51550486,谢谢!1、概述 相信大家对正则表...
- select(length('MY INFO: Anxpp,23,and boy')-length(replace('MY INFO: Anxpp,23,and boy','an')))/length('an')from users;
REGEXP_REPLACE是REPLACE的增强版,支持正则表达式,扩展了一些功能。
语法:
- regexp_replace(source_string,pattern[,replace_string[,position[,occurrence[,match_parameter]]]])
replace_string表示用什么来替换source_string中与pattern匹配的部分。
occurrence为非负整数,0表示所有匹配项都被替换,为正数时替换第n次匹配。
其他参数在前面都已经介绍过了。
例1:
想象这样一个场景:有一个分布式的爬虫,负责抓取网页的程序已经将数据存入数据库,而当前负责处理的程序需要从其中读取其中的一些数据,包括电话号码。号码一般是11为,前3位区号,中间4位表示交换机,再加上后面4位,格式也不能确定,我们可以试着用下面的SQL来读取,生成我们想要的格式:
- select regexp_replace('电话:023 5868-8888 邮箱:anxppp@163.com',
- '.*([[:digit:]]{3})([^[:digit:]]{0,2})([[:digit:]]{4})([^[:digit:]]{0,2})([[:digit:]]{4}).*',
- '(\1)\3\5'
- ) phone from users;
该例返回:(023)58688888
"\1"、“\3”、“\5”分别表示第1、3、5个数据集。其他的,大家慢慢看就能看懂了。
配合where子句,可以限制要返回的行。
2.5、REGEXP_COUNT
REGEXP_COUNT函数返回在源串中出现的模式的次数,作为对REGEXP_INSTR函数的补充。
虽然COUNT是一个集合函数,操作的是行组,但是REGEXP_COUNT是单行函数,分别计算每一行。
语法: