(Les19 Regular expression support)[20180106]

上学目标

    -正则元字符串

    -SQL报句被利用正则搜索

    -SQL告知句子被采用正则相当

    -SQL报告词被行使正则取代字符串

 

正则表达式

    Oracle数据库10g引入针对正则表达式的支撑。

  
 实现了合UNIX可移栽操作系统(POSIX)标准,由电气和电子工程师协会(IEEE)控制,ASCII数据匹配的语义和语法。

    正则表达式是同栽描述简单和复杂的搜与操作模式之计。

 

正则(POSIX )元字符

    ‘*’ 匹配前面的表达式一浅还是频繁

    ‘|’ 指明两桩中选择是

   
‘^’ 匹配输入字符串的初步位置,注意,若是在方括号表达式中利用^,此时她象征未接受该字符集。

    ‘[]’ 标记一个中括声泪俱下表达式

    ‘{m}’  表示出现几乎糟糕

    ‘{m,n}’ 表示出现次数的限定值 m<=出现次数<=n

    ‘\’ 
有4种植不同含义,’\’反斜杠自身、\num 匹配的援、\n转义符和什么还未是。

    ‘+’  匹配前面的子表达式一软还是频繁

    ‘?’ 匹配前面的子表达式零次或平等破

    ‘.’ 匹配除换行符之外的旁单字符

    ‘()’ 标记一个子表达式的开始与了位置

     ‘[::]’ 代表是一个字符簇 :

            [[:alpha:]] 任何字母

            [[:digit:]] 任何数字

            [[:alnum:]] 任何字母和数字

            [[:space:]] 空白字符

            [[:upper:]] 大写字母

            [[:lowe:]] 小写字母

            [[:punct:]] 任何标点符号

            [[:xdigit:]] 任何16进制的数字,相当给[0-9a-fA-F]

           

    正则表达式函数

            REGEXP_LIKE 与LIKE的职能相似,匹配相似字符串

            REGEXP_REPLACE 与REPLACE功能相似,替换字符串

            REGEXP_INSTR 与INSTR功能相似,标识字符下标

            REGEXP_SUBSTR 与SUBTR功能相似,截取指定位置字符串

            REGEXP_COUNT 及COUNT相似,计算某个样式反复出现的次数

 

            它们以就此法达成与Oracle
SQL函数LIKE、INSTR、SUBSTR、REPLACE用法平,但是她采取POSIX正则表达式替代了一直的百分号(%)和通配符(_)字符。

 

 

        REGEXP_LIKE (srcstr,pattern [,match_option])

        REGEXP_INSTR (srcstr,pattern [,position [,occurrence
[,return_option [,match_option]]]])

        REGEXP_SUBSTR (srcstr,pattern [,position [,occurrence
[,match_option]]])

        REGEXP_REPLACE (srcstr,pattern [,replacestr [,position [,
occurrence [,match_option]]]])

   

例子一
求last_name中含有G[一个字符]g的名称
select * from employees
where  regexp_like (last_name,'(G.g){1}')  ;
LAST_NAME            EMPLOYEE_ID MANAGER_ID
-------------------- ----------- ----------
Gaga                         203        200

例子二
insert into employees values('Regexp02_test',208,200);
求出last_name名称中含有数字的
select *
from employees
where regexp_instr(last_name,'[[:digit:]]')>1 ;

LAST_NAME            EMPLOYEE_ID MANAGER_ID
-------------------- ----------- ----------
Regexp02_test                208        200

例子三
截取last_name数值之前的字符串
col last_name format a20
select regexp_substr(last_name,'[[:alpha:]]*') last_name,employee_id,manager_id
from employees;

LAST_NAME            EMPLOYEE_ID MANAGER_ID
-------------------- ----------- ----------
Dereck                       100          1
Gary                         200        100
Klec                         300        100
Gaga                         203        200
Wendy                        204        200
Xi                           205        200
Tinan                        206        200
Ling                         207        200
Owen                         301        300
Yi                           302        300
Regexp                       208        200
11 rows selected.

例子四
将last_name中的数值替换成**号
col last_name format a20
select regexp_replace(last_name,'[[:digit:]]','*') last_name,employee_id,manager_id
from employees;
LAST_NAME            EMPLOYEE_ID MANAGER_ID
-------------------- ----------- ----------
Dereck                       100          1
Gary                         200        100
Klec                         300        100
Gaga                         203        200
Wendy                        204        200
Xi                           205        200
Tinan                        206        200
Ling                         207        200
Owen                         301        300
Yi                           302        300
Regexp**_test                208        200

11 rows selected.

例子五
计算last_name中数值出现的次数
col last_name format a20
select last_name,regexp_count(last_name,'[[:digit:]]') t_count,employee_id,manager_id
from employees;

LAST_NAME               T_COUNT EMPLOYEE_ID MANAGER_ID
-------------------- ---------- ----------- ----------
Dereck                        0         100          1
Gary                          0         200        100
Klec                          0         300        100
Gaga                          0         203        200
Wendy                         0         204        200
Xi                            0         205        200
Tinan                         0         206        200
Ling                          0         207        200
Owen                          0         301        300
Yi                            0         302        300
Regexp02_test                 2         208        200

11 rows selected.

 

修总结:

    1.正则表达式的意与oracle 10g起来支持力量并遵照(POSIX)标准

    2.正则表达式所用的元操作字符

    3.正则表达式常见的几只函数并且实施而采用

相关文章