oracle的正则表达式(regular expression)详细介绍

    正则表达式是很多编程语言中都有的。可惜oracle8i、oracle9i中一直迟迟不肯加入,好在oracle10g中终于增加了期盼已久的正则表达式功能。你可以在oracle10g中使用正则表达式肆意地匹配你想匹配的任何字符串了。
正则表达式中常用到的元数据(metacharacter)如下:
^ 匹配字符串的开头位置。
$ 匹配支付传的结尾位置。
* 匹配该字符前面的一个字符0次,1次或者多次出现。例如52*oracle 可以匹配 5oracle,52oracle,522oracle,5222oracle等等。
+ 匹配该字符前面的一个字符1次或者多次出现。例如52+oracle 可以匹配 52oracle,522oracle,5222oracle等等
? 匹配该字符前面的一个字符0次或1次。例如52?oracle 只能匹配5oracle,52oracle等等
{n} 匹配一个字符串n次,n为正整数。例如:hel{2}o 所匹配的是hello
{n,m} 匹配一个字符串至少n次,至多m次。其中n和m都是整数。
. 匹配除了null之外的任何单个字符串
(pattern) 这个是用来匹配指定模式的一个子表达式
x|y 匹配x或者y,其中x和y是一个或者多个字符
[abc] 匹配括号中的任意一个字符。例如:[ab]bc可以匹配abc和bbc
[a-z] 匹配指定范围内的任意字符串。例如[A-G]hi可以匹配Ahi至Ghi
[::]指定一个字符类,可以匹配该类中的任意字符 这里的字符类包括:
[:alphanum:] 可以匹配字符0-9、A-Z、a-z
[:alpha:]可以匹配字符A-Z、a-z
[:blank:]可以匹配空格或者tab键
[:digit:]可以匹配数字 0-9
[:gragh:]可以匹配非空字符
[:punct:]可以匹配. , ” ‘等标点符号。
[:upper:]可以匹配字符A-Z
[:lower:]可以匹配字符a-z

匹配选项:
字符            功能
c               匹配时区分大小写

i               匹配时不区分大小写

m               源字符串为多行匹配

n              .可匹配任何换行符
函数:
1、REGEXP_LIKE
    是LIKE语句的正则表达式版本
    语法:REGEXP_LIKE(源字符串, 匹配表达式[,匹配选项])
    例子:
    SELECT product_name FROM oe.product_information WHERE regexp_like (product_name, 'SS[PS]/[VS]');
    SS[PS]/[VS]匹配:SSP / V 、SSP / S 、 SSS / V 、 SSS / S
2、REGEXP_INSTR
    返回源字符串中首次匹配正则表达式的起始位置
    语法:REGEXP_INSTR(srcstr, pattern [, position [, occurrence
               [, return_option [, match_option]]]])
            srcstr:源字符串
            pattern:正则表达式
            position:搜索开始位置
            occurrence:返回第几个匹配项
            return_option:返回选项,0表示开始位置,1表示返回匹配的结束位置
            match_option:匹配选项
    例子:
    SELECT REGEXP_INSTR('500 Oracle Pkwy, Redwood Shores, CA', '[o][[:alpha:]]{3}', 1, 1, 0, 'i') RESULT FROM dual; --返回5

    SELECT REGEXP_INSTR('500 Oracle Pkwy, Redwood Shores, CA', '[o][[:alpha:]]{3}', 1, 1, 1, 'i') RESULT FROM dual; --返回9

    SELECT REGEXP_INSTR('500 Oracle Pkwy, Redwood Shores, CA', '[o][[:alpha:]]{3}', 1, 2, 0, 'i') RESULT FROM dual; --返回28

    SELECT REGEXP_INSTR('500 Oracle Pkwy, Redwood Shores, CA', '[o][[:alpha:]]{3}', 1, 2, 1, 'i') RESULT FROM dual; --返回32
   
    --返回try或trying或tried或tries的位置
    SELECT regexp_instr('We are trying to make the subject easier.',
                      'tr(y(ing)?|(ied)|(ies))') resultnum
    FROM dual;

3、REGEXP_SUBSTR
    返回源串中匹配正则表达式的子字符串
    语法:SUBSTR(srcstr, pattern [, position
                [, occurrence [, match_option]]])
            srcstr:源字符串
            pattern:正则表达式
            position:搜索的开始位置
            occurrence:返回第几个匹配的字符串
            match_option:匹配选项
    例子:
    --返回 , Redwood Shores,
    SELECT regexp_substr('500 Oracle Parkway, Redwood Shores, CA', ',[^,]+,') RESULT
  FROM dual;
   
    --返回http://www.oracle.com/
    SELECT regexp_substr('Go to http://www.oracle.com/products and click on database',
                     'http://([[:alnum:]]+\.?){3,4}/?') RESULT
  FROM dual;
   
    --匹配try或trying或tried或tries
    SELECT regexp_substr('We are trying to make the subject easier.',
                     'tr(y(ing)?|(ied)|(ies))')
  FROM dual;
   
    --返回sidval
    SELECT regexp_substr('system/pwd@orabase:1521:sidval', '[^:]+', 1, 3) RESULT FROM dual;

    --返回Three
    SELECT regexp_substr('One|Two|Three|Four|Five', '[^|]+', 1, 3) FROM dual;

4、REGEXP_REPLACE
    用执行字符串替换源文本中与正则表达式匹配的字符串
    语法:REGEXP_REPLACE(srcstr, pattern [,replacestr [, position
                 [, occurrence [, match_option]]]])
            srcstr:源字符串
            pattern:正则表达式
            replacestr:新的字符串
            position:搜索起始位置
            occurrence:第几个匹配项
            match_option:匹配选项
    例子:
    --返回George Mc Govern
    SELECT regexp_replace('George McGovern', '([[:lower:]])([[:upper:]])', '\1 \2') city
  FROM dual;

你可能感兴趣的:(oracle,正则表达式)