Oracle正则表达式函数.docx

上传人:b****5 文档编号:3422325 上传时间:2022-11-22 格式:DOCX 页数:10 大小:37.57KB
下载 相关 举报
Oracle正则表达式函数.docx_第1页
第1页 / 共10页
Oracle正则表达式函数.docx_第2页
第2页 / 共10页
Oracle正则表达式函数.docx_第3页
第3页 / 共10页
Oracle正则表达式函数.docx_第4页
第4页 / 共10页
Oracle正则表达式函数.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

Oracle正则表达式函数.docx

《Oracle正则表达式函数.docx》由会员分享,可在线阅读,更多相关《Oracle正则表达式函数.docx(10页珍藏版)》请在冰豆网上搜索。

Oracle正则表达式函数.docx

Oracle正则表达式函数

Oracle正则表达式函数

Oracle使用正则表达式离不开这4个函数:

1。

regexp_like

2。

regexp_substr

3。

regexp_instr

4。

regexp_replace

看函数名称大概就能猜到有什么用了。

regexp_like只能用于条件表达式,和like类似,但是使用的正则表达式进行匹配,语法很简单:

regexp_substr函数,和substr类似,用于拾取合符正则表达式描述的字符子串,语法如下:

regexp_instr函数,和instr类似,用于标定符合正则表达式的字符子串的开始位置,语法如下:

regexp_replace函数,和replace类似,用于替换符合正则表达式的字符串,语法如下:

这里解析一下几个参数的含义:

1。

source_char,输入的字符串,可以是列名或者字符串常量、变量。

2。

pattern,正则表达式。

3。

match_parameter,匹配选项。

取值范围:

i:

大小写不敏感;c:

大小写敏感;n:

点号.不匹配换行符号;m:

多行模式;x:

扩展模式,忽略正则表达式中的空白字符。

4。

position,标识从第几个字符开始正则表达式匹配。

5。

occurrence,标识第几个匹配组。

6。

replace_string,替换的字符串。

说了一堆文绉绉的,现在开始实例演练了,在此之前先建好一个表。

01createtabletmpas

02withdataas(

03  select'like'asid,'a9999'asstrfromdualunionall

04  select'like'      ,'a9c'         fromdualunionall

05  select'like'      ,'A7007'       fromdualunionall

06  select'like'      ,'123a34cc'    fromdualunionall

07  select'substr'    ,'123,234,345' fromdualunionall

08  select'substr'    ,'12,34.56:

78' fromdualunionall

09  select'substr'    ,'123456789'   fromdualunionall

10  select'instr'     ,'192.168.0.1' fromdualunionall

11  select'replace'   ,'(020)12345678'fromdualunionall

12  select'replace'   ,'001517729C28'fromdual

13)

14select*fromdata;

15

16select*fromtmp;

17ID     STR

18--------------------

19like   a9999

20like   a9c

21like   A7007

22like   123a34cc

23substr 123,234,345

24substr 12,34.56:

78

25substr 123456789

26instr  192.168.0.1

27replace(020)12345678

28replace001517729C28

regexp_like例子:

01selectstrfromtmpwhereid='like'andregexp_like(str,'A\d+','i');--'i'忽略大小写

02STR

03-------------

04a9999

05a9c

06A7007

07123a3

4cc

 

08

09selectstrfromtmpwhereid='like'andregexp_like(str,'a\d+');

10STR

11-------------

12a9999

13a9c

14123a34cc

15

16selectstrfromtmpwhereid='like'andregexp_like(str,'^a\d+');

17STR

18-------------

19a9999

20a9c

21

22selectstrfromtmpwhereid='like'andregexp_like(str,'^a\d+$');

23STR

24-------------

25a9999

regexp_substr例子:

01colstrformata15;

02select

03  str,

04  regexp_substr(str,'[^,]+')    str,

05  regexp_substr(str,'[^,]+',1,1)str,

06  regexp_substr(str,'[^,]+',1,2)str, --occurrence第几个匹配组

07  regexp_substr(str,'[^,]+',2,1)str  --position从第几个字符开始匹配

08fromtmp

09whereid='substr';

10STR            STR            STR            STR            STR

11---------------------------------------------------------------------------

12123,234,345    123            123            234            23

1312,34.56:

78    12             12             34.56:

78       2

14123456789      123456789      123456789                      23456789

15

16select

17  str,

18  regexp_substr(str,'\d')       str,

19  regexp_substr(str,'\d+' ,1,1)str,

20  regexp_substr(str,'\d{2}',1,2)str,

21  regexp_substr(str,'\d{3}',2,1)str

22fromtmp

23whereid='substr';

24STR            STR            STR            STR            STR

25---------------------------------------------------------------------------

26123,234,345    1              123            23             234

2712,34.56:

78    1              12             34

28123456789      1              123456789      34             234

29

30

31selectregexp_substr('123456789','\d',1,level)str --取出每位数字,有时这也是行转列的方式

32fromdual

33connectbylevel<=9

34STR

35---------------

361

372

383

394

405

416

427

438

449

regex_instr例子:

01colindformat9999;

02select

03  str,

04  regexp_instr(str,'\.'   )ind,

05  regexp_instr(str,'\.',1,2)ind,

06  regexp_instr(str,'\.',5,2)ind

07fromtmpwhereid='instr';

08STR              IND  IND  IND

09------------------------------

10192.168.0.1        4    8   10

11

12select

13  regexp_instr('192.168.0.1','\.',1,level)ind, --点号.所在的位置

14  regexp_instr('192.168.0.1','\d',1,level)ind   --每个数字的位置

15fromdual

16connectbylevel<= 9

17  IND  IND

18----------

19    4    1

20    8    2

21   10    3

22    0    5

23    0    6

24    0    7

25    0    9

26    0   11

27    0    0

regex_replace例子:

01select

02  str,

03  regexp_replace(str,'020','GZ')str,

04  regexp_replace(str,'(\d{3})(\d{3})','<\2\1>')str--将第一、第二捕获组交换位置,用尖括号标识出来

05fromtmp

06whereid='replace';

07STR            STR            STR

08---------------------------------------------

09(020)12345678  (GZ)12345678   (020)<456123>78

10001517729C28   001517729C28   <517001>729C28

综合应用的例子:

01colrow_lineformata30;

02withsudokuas(

03  select'020000080568179234090000010030040050040205090070080040050000060289634175010000020'asline

04  fromdual

05),

06tmpas(

07  selectregexp_substr(line,'\d{9}',1,level)row_line,

08  levelcol

09  fromsudoku

10  connectbylevel<=9

11)

12selectregexp_replace(row_line,'(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)','\1\2\3\4\5\6\7\8\9')row_line

13fromtmp

14

15ROW_LINE

16------------------------------

17020000080

18568179234

19090000010

20030040050

21040205090

22070080040

23050000060

24289634175

25010000020

ORACLE中的支持正则表达式的函数主要有下面四个:

1,REGEXP_LIKE:

与LIKE的功能相似

2,REGEXP_INSTR:

与INSTR的功能相似

3,REGEXP_SUBSTR:

与SUBSTR的功能相似

4,REGEXP_REPLACE:

与REPLACE的功能相似

它们在用法上与OracleSQL函数LIKE、INSTR、SUBSTR和REPLACE用法相同,

但是它们使用POSIX正则表达式代替了老的百分号(%)和通配符(_)字符。

POSIX正则表达式由标准的元字符(metacharacters)所构成:

'^'匹配输入字符串的开始位置,在方括号表达式中使用,此时它表示不接受该字符集合。

'$'匹配输入字符串的结尾位置。

如果设置了RegExp对象的Multiline属性,则$也匹

配'/n'或'/r'。

'.'匹配除换行符之外的任何单字符。

'?

'匹配前面的子表达式零次或一次。

'+'匹配前面的子表达式一次或多次。

'*'匹配前面的子表达式零次或多次。

'|'指明两项之间的一个选择。

例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的

字符串。

'()'标记一个子表达式的开始和结束位置。

'[]'标记一个中括号表达式。

'{m,n}'一个精确地出现次数范围,m=<出现次数<=n,'{m}'表示出现m次,'{m,}'表示至少

出现m次。

/num匹配num,其中num是一个正整数。

对所获取的匹配的引用。

字符簇:

 

[[:

alpha:

]]任何字母。

[[:

digit:

]]任何数字。

[[:

alnum:

]]任何字母和数字。

[[:

space:

]]任何白字符。

[[:

upper:

]]任何大写字母。

[[:

lower:

]]任何小写字母。

[[:

punct:

]]任何标点符号。

[[:

xdigit:

]]任何16进制的数字,相当于[0-9a-fA-F]。

各种操作符的运算优先级

/转义符

(),(?

:

),(?

=),[]圆括号和方括号

*,+,?

{n},{n,},{n,m}限定符

^,$,anymetacharacter位置和顺序

*/

--创建表

createtablefzq

 idvarchar(4),

 valuevarchar(10)

);

--数据插入

insertintofzqvalues

('1','1234560');

insertintofzqvalues

('2','1234560');

insertintofzqvalues

('3','1b3b560');

insertintofzqvalues

('4','abc');

insertintofzqvalues

('5','abcde');

insertintofzqvalues

('6','ADREasx');

insertintofzqvalues

('7','123 45');

insertintofzqvalues

('8','adc de');

insertintofzqvalues

('9','adc,.de');

insertintofzqvalues

('10','1B');

insertintofzqvalues

('10','abcbvbnb');

insertintofzqvalues

('11','11114560');

insertintofzqvalues

('11','11124560');

--regexp_like

--查询value中以1开头60结束的记录并且长度是7位

select*fromfzqwherevaluelike'1____60';

select*fromfzqwhereregexp_like(value,'1....60');

--查询value中以1开头60结束的记录并且长度是7位并且全部是数字的记录。

--使用like就不是很好实现了。

select*fromfzqwhereregexp_like(value,'1[0-9]{4}60');

--也可以这样实现,使用字符集。

select*fromfzqwhereregexp_like(value,'1[[:

digit:

]]{4}60');

--查询value中不是纯数字的记录

select*fromfzqwherenotregexp_like(value,'^[[:

digit:

]]+$');

--查询value中不包含任何数字的记录。

select*fromfzqwhereregexp_like(value,'^[^[:

digit:

]]+$');

--查询以12或者1b开头的记录.不区分大小写。

select*fromfzqwhereregexp_like(value,'^1[2b]','i');

--查询以12或者1b开头的记录.区分大小写。

select*fromfzqwhereregexp_like(value,'^1[2B]');

--查询数据中包含空白的记录。

select*fromfzqwhereregexp_like(value,'[[:

space:

]]');

--查询所有包含小写字母或者数字的记录。

select*fromfzqwhereregexp_like(value,'^([a-z]+|[0-9]+)$');

--查询任何包含标点符号的记录。

select*fromfzqwhereregexp_like(value,'[[:

punct:

]]');

/*

理解它的语法就可以了。

其它的函数用法类似。

*/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1