oracle 正则表达式用法

l        方括号表达示

方括号表达式

描述

[[: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相同

(….)

分组子表达式

 

l        正则表达式运算符和函数

 

a)     REGEXP_SUBSTR

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

regexp_substr(source_string,pattern,start_position,occurrence,match_parameter)

 

 

其中source_string是必须的。可以是带引号的字符串或者变量。Pattern是用单引号引用的与正则表达式。Start_position指定了在字符串中的准确位置,默认值为1Occurrence是一个选项,指定在源字符串匹配过程中相对其他字符串,哪个字符串应该匹配。最后,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_REPLACEREPLACE函数类似,提供一种修改与所给正则表达式匹配的字符串的方法。作用包括纠正拼写错误、格式化输入输出的文本。

如电话号码的格式为: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 from emp where regexp_like(job, '(clerk|analyst)', 'i');

ename     job

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

smith     clerk

scott     analyst

adams     clerk

james     clerk

ford      analyst

miller    clerk

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle正则表达式是一种强大的工具,用于在字符串中进行模式匹配和替换。它使用标准的正则表达式语法,并提供了一系列内置函数来处理文本数据。 在Oracle中,可以使用REGEXP_LIKE函数来判断一个字符串是否匹配给定的正则表达式。例如,下面的查询将返回所有以字母开头的字符串: SELECT column_name FROM table_name WHERE REGEXP_LIKE(column_name, '^[a-zA-Z]') 除了REGEXP_LIKE外,Oracle还提供了其他正则表达式函数,如REGEXP_SUBSTR、REGEXP_REPLACE和REGEXP_INSTR。这些函数可以用于提取匹配的子字符串、替换匹配的文本或获取匹配的位置。 例如,使用REGEXP_SUBSTR函数可以从一个字符串中提取出第一个连续的数字。下面的查询将返回字符串中的第一个连续数字: SELECT REGEXP_SUBSTR(column_name, '[0-9]+') FROM table_name 除了支持常见的正则表达式元字符和字符类之外,Oracle还提供了一些特殊的正则表达式标记,用于更精确的匹配。例如,可以使用'[:digit:]'来匹配任意数字字符,而不仅仅是'0-9'。 在使用Oracle正则表达式时,需要注意性能方面的问题。正则表达式可能会耗费大量的系统资源,尤其是当处理大量数据时。因此,应该尽量避免不必要的正则表达式操作,并且使用提供的正则表达式函数来最大限度地优化查询性能。 总之,Oracle正则表达式是一种非常强大且灵活的工具,可用于在字符串中进行模式匹配和替换。它提供了一系列内置函数,使得处理文本数据更加方便和高效。但在使用过程中,需要权衡性能和灵活性,并尽量避免耗费大量的系统资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值