读书人

在 Oracle 中运用正则表达式

发布时间: 2012-07-18 12:05:41 作者: rapoo

在 Oracle 中使用正则表达式

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

1。regexp_like

2。regexp_substr

3。regexp_instr

4。regexp_replace

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

?

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

在 Oracle 中运用正则表达式

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

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

在 Oracle 中运用正则表达式

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

在 Oracle 中运用正则表达式

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

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

2。pattern,正则表达式。

3。match_parameter,匹配选项。

??????? 取值范围: i:大小写不敏感; c:大小写敏感;n:点号 . 不匹配换行符号;m:多行模式;x:扩展模式,忽略正则表达式中的空白字符。

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

5。occurrence,标识第几个匹配组。

6。replace_string,替换的字符串。

?

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

?

col row_line format a30;with sudoku as (  select '020000080568179234090000010030040050040205090070080040050000060289634175010000020' as line  from dual),tmp as (  select regexp_substr(line,'\d{9}',1,level) row_line,  level col  from sudoku  connect by level<=9)select regexp_replace( row_line ,'(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)','\1 \2 \3 \4 \5 \6 \7 \8 \9') row_linefrom tmpROW_LINE------------------------------0 2 0 0 0 0 0 8 05 6 8 1 7 9 2 3 40 9 0 0 0 0 0 1 00 3 0 0 4 0 0 5 00 4 0 2 0 5 0 9 00 7 0 0 8 0 0 4 00 5 0 0 0 0 0 6 02 8 9 6 3 4 1 7 50 1 0 0 0 0 0 2 0
?

读书人网 >其他数据库

热点推荐