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

[经验分享] oracle 正则表达式用法

[复制链接]

尚未签到

发表于 2016-7-18 11:05:19 | 显示全部楼层 |阅读模式
l        方括号表达示


方括号表达式



描述



[[:alnum:]]



字母和数字混合的字符



[[:alpha:]]



字母字符



[[:cntrl:]]



控制字符



[[:digit:]]



数字字符



[[:graph:]]



图像字符



[[:lower:]]



小写字母字符



[[:print:]]



打印字符



[[:punct:]]



标点符号字符



[[:space:]]



空格字符



[[:upper:]]



大写字母字符



[[:xdigit:]]



十六进制数字字符





 

l        元字符


元字符



描述



*



如果有前面字符串的0次以上出现时匹配



+



如果有前面字符串的1次以上出现时匹配



{m}



m是整数。它文本中找出给定子表达式的恰好m次出现



{n}?



前面的字符串只出现一次时匹配



{m,}



M是整数。它在文本中找出给定子表达示的至少m次出现



{n,}?



匹配前面的字符串至少n



{m,n}



Mn是整数。它在文本中找出给定子表达示的mn次出现



{n,m}



匹配前面的字符串至少到n次,但不多于m



c



查询操作区分大小写



i



查询操作不区分大水写



m



多行字符串上的查询,在源字符串包含多行时,该查询允许用(^)模式匹配字符串的开始



n



通常匹配单个字符,也可以匹配新行



x



需要忽略正则表达示中的空格字符时,使用参数‘X



\A



匹配字符串首,而不是行首,因而多行字符串不能匹配每一行



\d



匹配任意数字字符



\D



匹配任意非数字字符



\s



匹配任意空格字符



\S



匹配任意非空格字符



\w



匹配任意字符和数字。该字符和[:alnum:]之间的不同是\w包括下划线字符



\W



匹配任意非空字符串



*



通配符。找出在文本中包含0或多次给定子表达式出现的记录



+



找出在文本中包含1或多次给定子表达式出现的记录






找出在文本中包含0次或1次给定子表达示出现的记录



.



匹配文本中的任意字符



 ^



锚。如果该字符后的表达式出现在行首,则匹配成功



$



锚。如果该字符后的表达式出现在行首,则匹配成功



|



分隔符,使用方法和OR相同



(….)



分组子表达式





 

l        正则表达式运算符和函数
 

a)     REGEXP_SUBSTR
REGEXP_SUBSTR为指定字符串的一部分与正则表达式建立匹配。语法如下:

  
regexp_substr(source_string,pattern,start_position,occurrence,match_parameter)

 



 

其中source_string是必须的。可以是带引号的字符串或者变量。Pattern是用单引号引用的与正则表达式。Start_position指定了在字符串中的准确位置,默认值为1。Occurrence是一个选项,指定在源字符串匹配过程中相对其他字符串,哪个字符串应该匹配。最后,match_parameter也是一个选项,指定在匹配时是否区分大水写。

示例1


sql> select regexp_substr('the zip code 80831 is for falcon, co','[[:digit:]]{5}' ) regexp_substr from dual;
regexp_substr
-------------
80831

 
 
示例2
  
sql> select regexp_substr('the zip code 80831 is for falcon, co', '[[:alpha:]]{3,}', 1, 3) regexp_substr from dual;
regexp_substr
-------------
code

  


 
示例3
  
SQL> select regexp_substr('comments or questions - email feedback@plsqlbook.com', '[[:alnum:]](([_\.\-\+]?[[:alnum:]]+)*)@' ||
2        '([[:alnum:]]+)(([\.-]?[[:alnum:]]+)*)\.([[:alpha:]]{2,})') REGEXP_SUBSTR
3   from dual;
REGEXP_SUBSTR
----------------------
feedback@plsqlbook.com
b)     REGEXP_INSTR

  


 




REGEXP_INSTR返回与正则表达式匹配的字符和字符串的位置。如
 


  
SQL> select regexp_instr('The zip code 80831 is for falcon, co', '[[:digit:]]{5}') REGEXP_INSTR from dual;

REGEXP_INSTR
------------
14

c)     REGEXP_REPLACE

 



 

REGEXP_REPLACE与REPLACE函数类似,提供一种修改与所给正则表达式匹配的字符串的方法。作用包括纠正拼写错误、格式化输入输出的文本。

如电话号码的格式为:719-111-1111。使用REGEX_REPLACER的返回值是:

  

SQL> select regexp_replace('Reformat the phone number 719-111-1111 ...',
2        '[1]?[-.]?(\(?[[:digit:]]{3}\)?)+[- .]?'
3        || '([[:digit:]]{3})[- .]?([[:digit:]]{4})',
4        ' (\1) \2-\3') regexp_replace
5   from dual;

REGEXP_REPLACE
---------------------------------------------
Reformat the phone number (719) 111-1111 ...
S
d)     REGEXP_LIKE

 



 

REGEXP_LIKE运算符与LIKE运算符相似,但是功能更强大,因为它支持使用与此正则表达式与文本进行匹配。语法如下:

REGEXP_LIKE(source_string, pattern, match_parameter)

Source_string可以是文字字符串,如果前面例中的字符串,也可以是包含某些字符串的变量或列。Pattern是要进行匹配的正则表达式。Match_parameter用于指定在匹配时是否区分大小写。



sql> select ename, job from emp where regexp_like(job, '(clerk|analyst)', 'i');
ename     job
---------- ---------
smith     clerk
scott     analyst
adams     clerk
james     clerk
ford      analyst
miller    clerk

 

 

 

运维网声明 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.yunweiku.com/thread-245803-1-1.html 上篇帖子: Oracle日期时间应用(二) 下篇帖子: oracle中的开窗函数理解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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