时间:2021-07-01 10:21:17 帮助过:54人阅读
http://www.2cto.com/database/201209/154045.html
Oracle正则表达式(regularexpression)
| 
 元字符  | 
 字符含义  | 
 举例说明  | 
| 
 ^  | 
 匹配字符串的开始位置(在[]中使用,此时它表示不接受该字符集合。  | 
 ^a:匹配以a开始的字符串 [^a]:匹配不含a的字符串  | 
| 
 -  | 
 当使用在a-m表示范围; 当使用在第一个字符时表示 连字符串,如[-abc]  | 
 
  | 
| 
 $  | 
 匹配字符结束位置  | 
 ‘a$‘:匹配以a结束的字符串  | 
| 
 .  | 
 匹配除换行符 n之外的任何单字符。  | 
 
  | 
| 
 ?  | 
 匹配前面的子表达式零次或一次  | 
 tr(y(ing)?):可以表示try或者trying  | 
| 
 *  | 
 匹配前面的子表达式零次或多次  | 
 
  | 
| 
 +  | 
 匹配前面的子表达式一次或多次  | 
 
  | 
| 
 ()  | 
 标记一个子表达式的开始和结束位置  | 
 a(b)*可以匹配 ab,abb,abbb,youabb (c|d)匹配c或d  | 
| 
 []  | 
 标记一个中括号表达式  | 
 [cd]匹配选择c或d等同于 (c|d)。匹配的是单字符,[^cd]是匹配c,d之外的单字符。 [a-z]表示所有小写字母  | 
| 
 {m,n}  | 
 m= <出现次数 <=n,‘{m}‘表示出现m次,‘{m,}‘表示至少出现m次。  | 
 
  | 
| 
 |  | 
 表示或者的关系。指明两项之间的一个选择  | 
 
  | 
| 
 字符簇  | 
 字符含义  | 
 
  | 
| 
 [[:alpha:]]  | 
 任何字母。  | 
 
  | 
| 
 [[:digit:]]  | 
 [[:digit:]] 任何数字。  | 
 
  | 
| 
 [[:alnum:]]  | 
 任何字母和数  | 
 
  | 
| 
 [[:space:]]  | 
 任何白字符。  | 
 
  | 
| 
 [[:upper:]]  | 
 任何大写字母。  | 
 
  | 
| 
 [[:lower:]]  | 
 任何小写字母。  | 
 
  | 
| 
 [[:punct:]]  | 
 任何标点符号。  | 
 
  | 
| 
 [[:xdigit:]]  | 
 任何16进制的数字,相当于[0-9a-fA-F]。  | 
 
  | 
Oracle支持正则表达式的内置函数
| 
 名称  | 
 语法  | 
 备注  | 
| 
 REGEXP_LIKE  | 
 REGEXP_LIKE (source_string, pattern [, match_parameter] )  | 
 source_string:源字符串 Pattern:正则表达式 match_parameter:匹配模式(i:不区分大小写;c:区分大小写;n:允许使用可以匹配任意字符串的操作符;m:将x作为一个包含多行的字符串。  | 
| 
 REGEXP_REPLACE  | 
 REGEXP_REPLACE (source_string, pattern [,replace_string] [,position] [,occurtence] [,match_parameter] )  | 
 
 replace_string:用于替换的字符串 Position:开始搜索的起始位置 occurtence指定替换第n次出现字符串 其他同上。  | 
| 
 REGEXP_SUBSTR  | 
 REGEXP_SUBSTR (source_string, pattern [,position [,occurrence [,match_parameter]]] )  | 
 Position:指定在字符串中准确位置,即开始匹配的字符的位置,默认为1 Occurrence:指定在源字符串匹配过程中相对其他字符串,哪个字符串应该匹配。例如 select regexp_substr(‘The zip code80831 is for falcon, co‘, ‘[[:alpha:]]{3,}‘, 1, 3) from dual; 结果选择的是code而非The或zip。 select regexp_substr(‘The zip code80831 is for falcon, co‘, from dual; 结果是for  | 
| 
 REGEXP_INSTR  | 
 REGEXP_INSTR (source_string, pattern [,start_position [,occurrence [,return_option [,match_parameter]]]] )  | 
 start_position: 开始搜索位置 Occurrence: 第n次出现pattern,默认为1 return_option: 0:pattern的起始位置 1:pattern下一个字符起始位置 默认为0  | 
| 
 REGEXP_COUNT  | 
 REGEXP_COUNT (source_string, pattern [[,start_position] [,match_parameter]])  | 
 11g新增的函数,表示pattern在原字符串中出现的次数 start_position: 开始搜索的位置  | 
Oracle支持正则表达式函数举例。
Regexp_substr:用来提取一个字符串的一部分。
Regexp_substr(‘first filed, second filed, thirdfiled‘, [^,]*,‘)
Pattern为‘, [^,]*,‘表示以,开始逗号,中间空一个格,连续0或多个非逗号字符,最后还是逗号,这样,返回则为‘, second filed,‘。
-------------------------------------------------------------------------------
Regexp_instr:用来pattern的起始位置。
如有一组地址,返回邮编的位置
regexp_instr(‘Jone Smith,10045 Berry Lane,SanJoseph,CA
91234-1234‘,‘[[:digit:]]{5}([-[[:digit:]]{4}])?$‘)
显然结果位置是91234-1234对应的起始位置。
-------------------------------------------------------------------------------
Regexp_replace:用来将pattern替换成需要替换的字符串,相比传统的replace函数,该函数相比较灵活。例如:
‘Jone smith‘中有三个空格,而‘Jone smith‘有2个空格,要将中间的空格改为一个空格,使用replace就要使用2次,而是用正则表达式,我们就就可以将pattern设计为
‘( ){2,}‘这样
regexp_replace(mc,‘( ){2,}‘,‘ ‘)
-------------------------------------------------------------------------------
regexp_like是增强版的like,可以包含_和%通配符,使用在where条件中。
正则表达式特性---后向引用
通过将自表达式匹配的内容缓存到缓冲区中,从左相右进行编号,以/digit(digit为1-9)。而子表达式用圆括号表示。
1.在regexp_replace中应用:
将字符串‘aa bb cc‘反写成‘cc bb aa‘则可以设计如下:
regexp_replace(‘aa bbcc‘,‘(.*) (.*) (.*)‘,‘\3 \2 \1‘)
(.*)则表示任何一个字符串组合,三个这样的组合用空格隔开,与源字符串吻合,\1,\2,\3则分别存储了三个字表达式的值,这样我们就可以使用这个达到目的。
2.在regexp_substr中应用:
查找被空格隔开的重复字母数字值
regexp_substr(‘the finaltest is is the implention‘,([[:alnum:]]+)([[:space:]]+)\1‘)
返回结果为is is 。([[:alnum:]]+)([[:space:]]+)返回很多字符串,但是增加一个\1就表示连续返回两个同样字符串,这样就把重复的串给找出来。
http://www.jb51.net/article/31227.htm
Oracle中REGEXP_SUBSTR及其它支持正则表达式的内置函数小结
标签: