Oracle中的正则函数

一、Oracle中的正则函数
1.REGEXP_SUBSTR
 (1)函数调用:REGEXP_SUBSTR(source_char,pattern,position,occurrence,match_param,subexpr)
    source_char:被匹配的字符串
    pattern:正则表达式
    position:匹配开始位置(可选,默认为1)
    occurrence:匹配第几个位置(可选,默认1)
    match_param:区分大小写检索(可选,i不分大小写,c区分大小写,默认c)
    subexpr:找到正则表达式中的第几个子表达式
 (2)使用:按正则表达式取字符串
 (3)例子
   1)SELECT REGEXP_SUBSTR('1,2,3,4,5','[^,]+') "REGEXPR_SUBSTR" FROM DUAL;
     结果 REGEXPR_SUBSTR
          1
   2)结合connect by 可以按照某个符号取出一列数据  
     SELECT REGEXP_SUBSTR('1,2,3,4,5','[^,]+',1,LEVEL) "REGEXPR_SUBSTR" FROM DUAL CONNECT BY LEVEL<=5;
   3)字符串中不确定被分割多少个字符串
     SELECT REGEXP_SUBSTR('1,2,3,4,5','[^,]+',1,LEVEL) "REGEXPR_SUBSTR" FROM DUAL CONNECT BY LEVEL<=LENGTH('1,2,3,4,5')-LENGTH(REPLACE('1,2,3,4,5',',',''))+1;   
   4)截取两个不同字段的字符串为多个子串
    WITH tmp AS
     (SELECT '小明,小红' s_name, '10,20' s_pay FROM dual
      UNION ALL
      SELECT '小红,小华,小张', '30,40,80'FROM dual
      UNION ALL
      SELECT '小明', '50'FROM dual)
    SELECT regexp_substr(t.s_name, '[^,]+', 1, l),
           regexp_substr(t.s_pay, '[^,]+', 1, l)
      FROM tmp t,(SELECT LEVEL l FROM dual CONNECT BY LEVEL <= 100)
     WHERE l <=LENGTH(t.s_name) - LENGTH(regexp_replace(t.s_name, ',', '')) + 1;

2.REGEXP_LIKE
    (1)函数调用:REGEXP_LIKE(source_char,pattern,match_param)
       source_char:被匹配的字符串
       pattern:正则表达式
       match_param:区分大小写检索(可选,i不分大小写,c区分大小写,默认c)
    (2)例子
     1)例1(正则表达式的*元字码)
     WITH tmp AS
      (SELECT 'AD' elem FROM dual
       UNION ALL
       SELECT 'A1D' FROM dual
       UNION ALL
       SELECT 'A09D'FROM dual
       UNION ALL
       SELECT 'A09' FROM dual)
     SELECT * FROM tmp WHERE regexp_like(elem, '[a-z|A-Z][0-9]*[a-z|A-Z]');
     2)例2(正则表达式+元字码)
     WITH tmp AS
      (SELECT 'AD' elem FROM dual
       UNION ALL
       SELECT 'A1D' FROM dual
       UNION ALL
       SELECT 'A09D'FROM dual
       UNION ALL
       SELECT 'A09' FROM dual)
     SELECT * FROM tmp WHERE regexp_like(elem, '[a-z|A-Z][0-9]+[a-z|A-Z]');
 
3.REGEXP_INSTR
    (1)函数调用:REGEXP_INSTR (source_string, pattern, position,occurrence,return_option,match_parameter,subexpr)
        source_string:输入的字符串
        pattern:正则表达式
        position:标识从第几个字符开始正则表达式匹配。(默认为1)
        occurrence:标识第几个匹配组。(默认为1)
        return_option:0——返回第一个字符出现的位置。1:pattern下一个字符起始位置。
        match_parameter:取值范围
            i:大小写不敏感;
            c:大小写敏感;
              n:点号 . 不匹配换行符号;
              m:多行模式;
             x:扩展模式,忽略正则表达式中的空白字符。
        subexpr:找到正则表达式中的第几个子表达式    
            
    (2)例子
     1)例1
     SELECT regexp_instr('正则表达式在Oracle11g中的应用', '[a-z|A-Z|0-1]+')FROM dual;
     2)例2(occurrence)
     SELECT regexp_instr('正则表达式在Oracle11g中的应用oralce', '[a-z|A-Z|0-1]+',1,2)FROM dual;
     3)例3(return_option)
     SELECT regexp_instr('正则表达式在Oracle11g中的应用', '[a-z|A-Z|0-1]+',1,1,1) FROM dual;
     4)SELECT regexp_instr('1234567890', '(123)(4(56)(78))', 1, 1, 0, 'i', 4)  FROM DUAL;
    
4.REGEXP_REPLACE
    (1)函数调用
        REGEXP_REPLACE(source_string,pattern,replace_string,position,occurrence,match_parameter)
        source_string:输入的字符串
        pattern:正则表达式
        position:标识从第几个字符开始正则表达式匹配。(默认为1)
        occurrence:标识第几个匹配组。(默认为1)
        match_parameter:取值范围
    (2)例子    
     1)例1(替换字符串位置)
     SELECT regexp_replace('Ellen Hildi Smith', '(.*) (.*) (.*)', '\3, \1 \2') FROM dual
    
    

猜你喜欢

转载自sosohitstar.iteye.com/blog/2204151
今日推荐