【www.gdgbn.com--Oracle教程】

 

  方括号表达示

方括号表达式

描述

[[:alnum:]]

字母和数字混合的字符

[[:alpha:]]

字母字符

[[:cntrl:]]

控制字符

[[:digit:]]

数字字符

[[:graph:]]

图像字符

[[:lower:]]

小写字母字符

[[:print:]]

打印字符

[[:punct:]]

标点符号字符

[[:space:]]

空格字符

[[:upper:]]

大写字母字符

[[:xdigit:]]

十六进制数字字符

 

l        元字符

元字符

描述

*

如果有前面字符串的0次以上出现时匹配

+

如果有前面字符串的1次以上出现时匹配

{m}

m是整数。它文本中找出给定子表达式的恰好m次出现

{n}?

前面的字符串只出现一次时匹配

{m,}

m是整数。它在文本中找出给定子表达示的至少m次出现

{n,}?

匹配前面的字符串至少n

{m,n}

mn是整数。它在文本中找出给定子表达示的mn次出现

{n,m}

匹配前面的字符串至少到n次,但不多于m

c

查询操作区分大小写

i

查询操作不区分大水写

m

多行字符串上的查询,在源字符串包含多行时,该查询允许用(^)模式匹配字符串的开始

n

通常匹配单个字符,也可以匹配新行

x

需要忽略正则表达示中的空格字符时,使用参数‘x

a

匹配字符串首,而不是行首,因而多行字符串不能匹配每一行

d

匹配任意数字字符

d

匹配任意非数字字符

s

匹配任意空格字符

s

匹配任意非空格字符

w

匹配任意字符和数字。该字符和[:alnum:]之间的不同是w包括下划线字符

w

匹配任意非空字符串

*

通配符。找出在文本中包含0或多次给定子表达式出现的记录

+

找出在文本中包含1或多次给定子表达式出现的记录

找出在文本中包含0次或1次给定子表达示出现的记录

.

匹配文本中的任意字符

 ^

锚。如果该字符后的表达式出现在行首,则匹配成功

$

锚。如果该字符后的表达式出现在行首,则匹配成功

|

分隔符,使用方法和or相同

(….)

分组子表达式

create or replace function isnumber(valid_str in varchar2)
  return number
  is
  cursor valid_number is
  select 1 from dual where regexp_like(valid_str ,"^[+-]?d+(.d)?d*$");
  isnumber_ valid_number%rowtype;
  begin
  open valid_number;
  fetch valid_number into isnumber_;
  if (valid_number%found) then
  close valid_number;
  return 1;
  else
  close valid_number;
  return 0;
  end if;
  end isnumber;  
看一下常用正则

 

正则表达式运算符和函数

 

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 feedback@plsqlbook.com", "[[:alnum:]](([_.-+]?[[:alnum:]]+)*)@" ||

 2        "([[:alnum:]]+)(([.-]?[[:alnum:]]+)*).([[:alpha:]]{2,})") regexp_substr

 3   from dual;

 

regexp_substr

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

feedback@plsqlbook.com

 

 

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

 

本文来源:http://www.gdgbn.com/shujuku/28265/