oracle regular expression,Oracle正则表达式(regular expression)

元字符字符含义举例说明

^匹配字符串的开始位置(在[]中使用,此时它表示不接受该字符集合。^a:匹配以a开始的字符串

[^a]:匹配不含a的字符串

-当使用在a-m表示范围;

当使用在第一个字符时表示

连字符串,如[-abc]

$匹配字符结束位置‘a$’:匹配以a结束的字符串

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

?匹配前面的子表达式零次或一次tr(y(ing)?):可以表示try或者trying

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

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

()标记一个子表达式的开始和结束位置a(b)*可以匹配

ab,abb,abbb,youabb

(c|d)匹配c或d

[]标记一个中括号表达式[cd]匹配选择c或d等同于

(c|d)。匹配的是单字符,[^cd]是匹配c,d之外的单字符。

[a-z]表示所有小写字母

{m,n}m=

|表示或者的关系。指明两项之间的一个选择

字符簇字符含义

[[:alnum:]]字母和数字混合的字符

[[:alpha:]]字母字符

[[:cntrl:]]控制字符

[[:digit:]]数字字符

[[:graph:]]图像字符

[[:lower:]]小写字母字符

[[:print:]]打印字符

[[:punct:]]标点符号字符

Oracle支持正则表达式的内置函数名称语法备注

REGEXP_LIKEREGEXP_LIKE

(source_string,

pattern

[, match_parameter]

)source_string:

源字符串

Pattern:

正则表达式

match_parameter:

匹配模式(i:不区分大小写;c:区分大小写;n:允许使用可以匹配任意字符串的操作符;m:将x作为一个包含多行的字符串。

REGEXP_REPLACEREGEXP_REPLACE

(source_string,

pattern

[,replace_string]

[,position]

[,occurtence]

[,match_parameter]

)replace_string:

用于替换的字符串

Position:

开始搜索的起始位置

occurtence

指定替换第n次出现字符串

其他同上。

REGEXP_SUBSTRREGEXP_SUBSTR

(source_string, pattern

[,position

[,occurrence

[,match_parameter]]]

)Position:

指定在字符串中准确位置,默认为1

Occurrence:

指定在源字符串匹配过程中相对其他字符串,哪个字符串应该匹配。例如

select regexp_substr('The

zip code

80831 is for falcon, co',

'[[:alpha:]]{3,}', 1, 3)

from dual;

结果选择的是code而非The或zip。

REGEXP_INSTRREGEXP_INSTR

(source_string,

pattern

[,start_position

[,occurrence

[,return_option

[,match_parameter]]]]

)start_position:

开始搜索位置

Occurrence:

第n次出现pattern,默认为1

return_option:

0:pattern的起始位置

1:pattern下一个字符起始位置

默认为0

REGEXP_COUNTREGEXP_COUNT

(source_string,

pattern

[[,start_position]

[,match_parameter]])11g新增的函数,表示pattern在原字符串中出现的次数

start_position:

开始搜索的位置

Oracle支持正则表达式函数举例:

a)REGEXP_SUBSTR

REGEXP_SUBSTR为指定字符串的一部分与正则表达式建立匹配。语法如下:

REGEXP_SUBSTR(source_string,

pattern,

start_position,

occurrence,

match_parameter)

其中source_string是必须的。可以是带引号的字符串或者变量。Pattern是用单引号引用的与正则表达式。Start_position指定了在字符串中的准确位置,默认值为1。Occurrence是一个选项,指定在源字符串匹配过程中相对其他字符串,哪个字符串应该匹配。最后,match_parameter也是一个选项,指定在匹配时是否区分大水写。

示例1:

SQL> select regexp_substr('The zip code

80831 is for falcon, co','[[:digit:]]{5}' ) REGEXP_SUBSTR from dual;

REGEXP_SUBSTR

-------------

80831

示例2:

SQL> select regexp_substr('The zip code

80831 is for falcon, co', '[[:alpha:]]{3,}', 1, 3) REGEXP_SUBSTR from dual;

REGEXP_SUBSTR

-------------

code

示例3

SQL> select regexp_substr('comments or

questions - email [email protected]',

'[[:alnum:]](([_\.\-\+]?[[:alnum:]]+)*)@' ||

2

'([[:alnum:]]+)(([\.-]?[[:alnum:]]+)*)\.([[:alpha:]]{2,})') REGEXP_SUBSTR

3 from dual;

REGEXP_SUBSTR

----------------------

[email protected]

b)REGEXP_INSTR

REGEXP_INSTR返回与正则表达式匹配的字符和字符串的位置。如

SQL> select regexp_instr('The zip code 80831 is for falcon, co',

'[[:digit:]]{5}') REGEXP_INSTR from dual;

REGEXP_INSTR

------------

14

c)REGEXP_REPLACE

REGEXP_REPLACE与REPLACE函数类似,提供一种修改与所给正则表达式匹配的字符串的方法。作用包括纠正拼写错误、格式化输入输出的文本。

如电话号码的格式为:719-111-1111。使用REGEX_REPLACER的返回值是:

SQL> select

regexp_replace('Reformat the phone number 719-111-1111 ...',

2

'[1]?[-.]?(\(?[[:digit:]]{3}\)?)+[- .]?'

3 ||

'([[:digit:]]{3})[- .]?([[:digit:]]{4})',

4 ' (\1) \2-\3')

regexp_replace

5 from dual;

REGEXP_REPLACE

---------------------------------------------

Reformat the

phone number (719) 111-1111 ...

S

d)REGEXP_LIKE

REGEXP_LIKE运算符与LIKE运算符相似,但是功能更强大,因为它支持使用与此正则表达式与文本进行匹配。语法如下:

REGEXP_LIKE(source_string, pattern,

match_parameter)

Source_string可以是文字字符串,如果前面例中的字符串,也可以是包含某些字符串的变量或列。Pattern是要进行匹配的正则表达式。Match_parameter用于指定在匹配时是否区分大小写。

SQL> select

ename, job

2 from emp

3 where

regexp_like(job, '(clerk|analyst)', 'i');

ENAME JOB

----------

---------

SMITH CLERK

SCOTT ANALYST

ADAMS CLERK

JAMES CLERK

FORD ANALYST

MILLER CLERK

你可能感兴趣的:(oracle,regular,expression)