SQL 中的正则函数
ORACLE中支持正则表达式的函数主要有下面四个:
1,REGEXP_LIKE :与LIKE的功能相似,比LIKE强大得多。
2,REGEXP_INSTR :与INSTR的功能相似。
3,REGEXP_SUBSTR :与SUBSTR的功能相似。
4,REGEXP_REPLACE :与REPLACE的功能相似。
REGEXP_REPLACE(source_string,pattern,replace_string,position,occurtence,match_parameter)函数(10g新函数)
描述:字符串替换函数。相当于增强的replace函数。Source_string指定源字符表达式;pattern指定规则表达式;replace_string指定用于替换的字符串;position指定起始搜索位置;occurtence指定替换出现的第n个字符串;match_parameter指定默认匹配操作的文本串。ITPUB个人空间.x mz\ n`rg9[1`
其中replace_string,position,occurtence,match_parameter参数都是可选的。
REGEXP_SUBSTR(source_string,
pattern[,position [, occurrence[, match_parameter]]])函数(10g新函数)
描述:返回匹配模式的子字符串。相当于增强的substr函数。Source_string指定源字符表达式;pattern指定规则表达式;position指定起始搜索位置;occurtence指定替换出现的第n个字符串;match_parameter指定默认匹配操作的文本串。
其中position,occurtence,match_parameter参数都是可选的。
match_option的取值如下:
'c' 说明在进行匹配时区分大小写(缺省值);
'i' 说明在进行匹配时不区分大小写;
'n' 允许使用可以匹配任意字符的操作符;
'm' 将x作为一个包含多行的字符串。
REGEXP_LIKE(source_string,
pattern[, match_parameter])函数(10g新函数)
描述:返回满足匹配模式的字符串。相当于增强的like函数。Source_string指定源字符表达式;pattern指定规则表达式;match_parameter指定默认匹配操作的文本串。
其中position,occurtence,match_parameter参数都是可选的。
REGEXP_INSTR(source_string,
pattern[, start_position[, occurrence[, return_option[, match_parameter]]]])函数(10g新函数)
描述: 该函数查找 pattern ,并返回该模式的第一个位置。您可以随意指定您想要开始搜索的 start_position。 occurrence 参数默认为 1,除非您指定您要查找接下来出现的一个模式。return_option 的默认值为 0,它返回该模式的起始位置;值为 1 则返回符合匹配条件的下一个字符的起始位置。
一. 匹配字符

二. 重复字符

三. 定位字符

注:定位字符可以应用于字符或组合,放在字符串的左端或右端
四. 分组字符
|
分组字符 |
定 义 |
举 例 |
|
() |
此字符可以组合括号内模式所匹配的字符,它是一个捕获组,也就是说模式匹配的字符作为最终设置了ExplicitCapture选项――默认状态下字符不是匹配的一部分 |
输入字符串为:ABC1DEF2XY 匹配3个从A到Z的字符和1个数字的正则表达式:([A-Z]{3}\d) 将产生两次匹配:Match 1=ABC1;Match 2=DEF2 每次匹配对应一个组:Match1的第一个组=ABC;Match2的第1个组=DEF 有了反向引用,就可以通过它在正则表达式中的编号以及C#和类Group,GroupCollection来访问组。如果设置了ExplicitCapture选项,就不能使用组所捕获的内容 |
|
(?:) |
此字符可以组合括号内模式所匹配的字符,它是一个非捕获组,这意味着模式所的字符将不作为一个组来捕获,但它构成了最终匹配结果的一部分。它基本上与上面的组类型相同,但设定了选项ExplicitCapture |
输入字符串为:1A BB SA1 C 匹配一个数字或一个A到Z的字母,接着是任意单词字符的正则表达式为:(?:\d|[A-Z]\w) 它将产生3次匹配:每1次匹配=1A;每2次匹配=BB;每3次匹配=SA 但是没有组被捕获 |
|
(?<name>) |
此选项组合括号内模式所匹配的字符,并用尖括号中指定的值为组命名。在正则表达式中,可以使用名称进行反向引用,而不必使用编号。即使不设置ExplicitCapture选项,它也是一个捕获组。这意味着反向引用可以利用组内匹配的字符,或者通过Group类访问 |
输入字符串为:Characters in Sienfeld included Jerry Seinfeld,Elaine Benes,Cosno Kramer and George Costanza能够匹配它们的姓名,并在一个组llastName中捕获姓的正则表达式为:\b[A-Z][a-z]+(?<lastName>[A-Z][a-z]+)\b 它产生了4次匹配:First Match=Jerry Seinfeld; Second Match=Elaine Benes; Third Match=Cosmo Kramer; Fourth Match=George Costanza 每一次匹配都对应了一个lastName组: 第1次匹配:lastName group=Seinfeld 第2次匹配:lastName group=Benes 第3次匹配:lastName group=Kramer 第4次匹配:lastName group=Costanza 不管是否设置了选项ExplictCapture,组都将被捕获 |
|
(?=) |
正声明。声明的右侧必须是括号中指定的模式。此模式不构成最终匹配的一部分 |
正则表达式\S+(?=.NET)要匹配的输入字符串为:The languages were Java,C#.NET,VB.NET,C,Jscript.NET,Pascal 将产生如下匹配:〕 C# VB JScript. |
|
(?!) |
负声明。它规定模式不能紧临着声明的右侧。此模式不构成最终匹配的一部分 |
\d{3}(?![A-Z])要匹配的输入字符串为:123A 456 789111C 将产生如下匹配: 456 789 |
|
(?<=) |
反向正声明。声明的左侧必须为括号内的指定模式。此模式不构成最终匹配的一部分 |
正则表达式(?<=New)([A-Z][a-z]+)要匹配的输入字符串为:The following states,New Mexico,West Virginia,Washington, New England 它将产生如下匹配: Mexico England |
|
(?<!) |
反向正声明。声明的左侧必须不能是括号内的指定模式。此模式不构成最终匹配的一部分 |
正则表达式(?<!1)\d{2}([A-Z])要匹配的输入字符串如下:123A456F789C111A 它将实现如下匹配: 56F 89C |
|
(?>) |
非回溯组。防止Regex引擎回溯并且防止实现一次匹配 |
假设要匹配所有以“ing”结尾的单词。输入字符串如下:He was very trusing 正则表达式为:.*ing 它将实现一次匹配――单词trusting。“.”匹配任意字符,当然也匹配“ing”。所以,Regex引擎回溯一位并在第2个“t”停止,然后匹配指定的模式“ing”。但是,如果禁用回溯操作:(?>.*)ing 它将实现0次匹配。“.”能匹配所有的字符,包括“ing”――不能匹配,从而匹配失败 |
五. 决策字符

注:上面表中列出的字符强迫处理器执行一次if-else决策
六. 替换字符

注:以上为常用替换字符,不全
七. 转义序列

八. 选项标志

参考:http://www.cnblogs.com/gkl0818/archive/2009/02/12/1389521.html
SQL 中的正则函数的更多相关文章
- SQL中Round(),Floor(),Ceiling()函数的浅析
项目中的一个功能模块上用到了标量值函数,函数中又有ceiling()函数的用法,自己找了一些资料,对SQL中这几个函数做一个简单的记录,方便自己学习.有不足之处欢迎拍砖补充 1.round()函数遵循 ...
- 关于sql中in 和 exists 的效率问题,in真的效率低吗
原文: http://www.cnblogs.com/AdamLee/p/5054674.html 在网上看到很多关于sql中使用in效率低的问题,于是自己做了测试来验证是否是众人说的那样. 群众: ...
- 学习sql中的排列组合,在园子里搜着看于是。。。
学习sql中的排列组合,在园子里搜着看,看到篇文章,于是自己(新手)用了最最原始的sql去写出来: --需求----B, C, F, M and S住在一座房子的不同楼层.--B 不住顶层.C 不住底 ...
- SQL中distinct的用法
SQL中distinct的用法 1.作用于单列 2.作用于多列 3.COUNT统计 4.distinct必须放在开头 5.其他 在表中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出 ...
- hibernate中java类的成员变量类型如何映射到SQL中的数据类型变化
hibernate映射文件??.hbm.xml配置映射元素详解--Hibernate映射类型 在从Hibernate的java的成员类型映射到SQL中的数据类型,其内映射方式它满足,SQL可以自己调制 ...
- C#调用SQL中的存储过程中有output参数,存储过程执行过程中返回信息
C#调用SQL中的存储过程中有output参数,类型是字符型的时候一定要指定参数的长度.不然获取到的结果总是只有第一字符.本人就是由于这个原因,折腾了很久.在此记录一下,供大家以后参考! 例如: ...
- sql中case when语句的使用-来自网摘文章
Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...
- SQL中inner join、outer join和cross join的区别
对于SQL中inner join.outer join和cross join的区别简介:现有两张表,Table A 是左边的表.Table B 是右边的表.其各有四条记录,其中有两条记录name是相同 ...
- SQL中对于两个不同的表中的属性取差集except运算
SQL中对两个集合取差集运算,使用except关键字,语法格式如下: SELECT column_name(s) FROM table_name1 EXCEPT SELECT column_name( ...
随机推荐
- [洛谷P4107] HEOI2015 兔子与樱花
问题描述 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号从0到n-1,这n个分叉点由n-1个树枝连接,我们可以把它 ...
- SonarQube规则之bug类型
1.".equals()" should not be used to test the values of "Atomic" classes.bug 主要不要 ...
- 【PowerOJ1755&网络流24题】深海机器人问题(费用流)
题意: 思路: [问题分析] 最大费用最大流问题. [建模方法] 把网格中每个位置抽象成网络中一个节点,建立附加源S汇T. 1.对于每个顶点i,j为i东边或南边相邻的一个节点,连接节点i与节点j一条容 ...
- Finer Resolution Observation and Monitoring -Global Land Cover更精细的分辨率观测和监测-全球土地覆盖
http://data.ess.tsinghua.edu.cn/ 全球土地覆盖数据是了解人类活动与全球变化之间复杂互动的关键信息来源.FROM-GLC(全球土地覆盖的精细分辨率观测和监测)是首个使用陆 ...
- C. Anna, Svyatoslav and Maps
C. Anna, Svyatoslav and Maps 给定一个有向图,给定一条有向路径,求一条顶点最少的路径,使得给定的路径是它的最短路 folyd预处理出任意两点间的最短路,然后判断是否可以缩点 ...
- RabbitMQ消息如何100%投递成功(六)
消息如何保障100%的投递成功? 什么是生产端的可靠性投递? 保障消息的成功发出 保障MQ节点的成功接收 发送端收到MQ节点(Broker)确认应答 完善的消息进行补偿机制(如网络问题没有返回确认应答 ...
- es之Source字段和store字段
PUT /website/blog/ { "title" : "elasticsearchshi是是什么", "author" : &quo ...
- python 调用C++ DLL,传递int,char,char*,数组和多维数组
ctypes 数据类型和 C数据类型 对照表 ctypes type C type Python type c_bool _Bool bool (1) c_char char 1-character ...
- What is the difference between Kill and Kill -9 command in Unix?
w difference kill -9 pid and kill pid command - Ask Ubuntu https://askubuntu.com/questions/791841/d ...
- Delphi XE2 之 FireMonkey 入门(8) - TImage
TImage 主要成员: { 属性 } Bitmap : TBitmap; //图像 BitmapMargins : TBounds; ...