网站首页 > 文章中心 > 其它

oracle如何使用正则

作者:小编 更新时间:2023-09-22 11:07:21 浏览量:147人看过

oracle 的正则表达式

oracle的正则表达式(10g才可以用)

oracle的正则表达式(regular expression)简单介绍

oracle如何使用正则-图1

目前,正则表达式已经在很多软件中得到广泛的应用,包括*nix(Linux, Unix等),HP等操作系统,PHP,C#,Java等开发环境.

Oracle 10g正则表达式提高了SQL灵活性.有效的解决了数据有效性,重复词的辨认, 无关的空白检测,或者分解多个正则组成的字符串等问题.

Oracle 10g支持正则表达式的四个新函数分别是:REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR、和REGEXP_REPLACE.

它们使用POSIX 正则表达式代替了老的百分号(%)和通配符(_)字符.

特殊字符:

'^' 匹配输入字符串的开始位置,在方括号表达式中使用,此时它表示不接受该字符集合.

'$' 匹配输入字符串的结尾位置.如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或'\r'.

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

'?' 匹配前面的子表达式零次或一次.

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

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

'( )' 标记一个子表达式的开始和结束位置.

oracle如何使用正则-图2

'[]' 标记一个中括号表达式.

'{m,n}' 一个精确地出现次数范围,m=出现次数=n,'{m}'表示出现m次,'{m,}'表示至少出现m次.

\num 匹配 num,其中 num 是一个正整数.对所获取的匹配的引用.

正则表达式的一个很有用的特点是可以保存子表达式以后使用,被称为Backreferencing. 允许复杂的替换能力

如调整一个模式到新的位置或者指示被代替的字符或者单词的位置. 被匹配的子表达式存储在临时缓冲区

中,缓冲区从左到右编号, 通过\数字符号访问. 下面的例子列出了把名字 aa bb cc 变成cc, bb, aa.

REGEXP_REPLACE('ELLENHILDISMIT

cc, bb, aa

'\' 转义符.

字符簇:

[[:alpha:]] 任何字母.

[[:digit:]] 任何数字.

[[:alnum:]] 任何字母和数字.

[[:space:]] 任何白字符.

[[:upper:]] 任何大写字母.

[[:lower:]] 任何小写字母.

[[unct:]] 任何标点符号.

各种操作符的运算优先级

\ 转义符

(), (?, (?=), [] 圆括号和方括号

*, +, ?, {n}, {n,}, {n,m} 限定符

^, $, \anymetacharacter 位置和顺序

| "或"操作

--测试数据

insert into test values('aabbccddee');

insert into test values('bbaaaccddee');

insert into test values('ccabbddee');

insert into test values('ddaabbccee');

insert into test values('eeaabbccdd');

insert into test values('abcxy');

insert into test values('The final test is is is how to find duplicate words.');

commit;

第一段:REGEXP_LIKE

select * from test where regexp_like(mc,'^a.*e$');

oracle如何使用正则-图3

select * from test where regexp_like(mc,'^[[:lower:]]|[[:digit:]]');

select * from test where regexp_like(mc,'^[[:lower:]]');

Select mc FROM test Where REGEXP_LIKE(mc,'[^[:digit:]]');

Select mc FROM test Where REGEXP_LIKE(mc,'^[^[:digit:]]');

第二段:REGEXP_INSTR

Select REGEXP_INSTR(mc,'[[:digit:]]$') from test;

Select REGEXP_INSTR(mc,'[[:digit:]]+$') from test;

Select REGEXP_INSTR('onetwothree','[^[[:lower:]]]') FROM DUAL;

Select REGEXP_INSTR(',,,,,','[^,]*') FROM DUAL;

Select REGEXP_INSTR(',,,,,','[^,]') FROM DUAL;

第三段:REGEXP_SUBSTR

SELECT REGEXP_SUBSTR(mc,'[a-z]+') FROM test;

SELECT REGEXP_SUBSTR('aababcde','^a.*b') FROM DUAL;

第四段:REGEXP_REPLACE

在oracle中如何使用正则函数表达式截取每一行中的每一个单元格中有多行数据的第一列?

函数格式如下:

function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)

__srcstr :需要进行正则处理的字符串

__pattern :进行匹配的正则表达式

__position :起始位置,从第几个字符开始正则表达式匹配(默认为1)

__occurrence :标识第几个匹配组,默认为1

__modifier :模式('i'不区分大小写进行检索;'c'区分大小写进行检索.默认为'c'.)

oracle SQL 正则表达式

用 Oracle Database 10g 使用正规表达式

您可以使用最新引进的 Oracle SQL REGEXP_LIKE 操作符和 REGEXP_INSTR、REGEXP_SUBSTR 以及 REGEXP_REPLACE 函数来发挥正规表达式的作用.您将体会到这个新的功能如何对 LIKE 操作符和 INSTR、SUBSTR 和 REPLACE 函数进行了补充.实际上,它们类似于已有的操作符,但现在增加了强大的模式匹配功能.被搜索的数据可以是简单的字符串或是存储在数据库字符列中的大量文本.正规表达式让您能够以一种您以前从未想过的方式来搜索、替换和验证数据,并提供高度的灵活性.

正规表达式的基本例子

默认情况下,一个正规表达式中的一个单独的字符或字符列表只匹配一次.为了指示在一个正规表达式中多次出现的一个字符,您可以使用一个量词,它也被称为重复操作符..如果您想要得到从字母 a 开始并以字母 b 结束的匹配模式,则您的正规表达式看起来像这样:^a.*b$.* 元字符重复前面的元字符 (.) 指示的匹配零次、一次或更多次.LIKE 操作符的等价的模式是 a%b,其中用百分号 (%) 来指示任意字符出现零次、一次或多次.

oracle 如何使用正则表达式匹配出一级域名

匹配完整域名的正则表达式:

完整的域名至少包括两个名字(比如google.com,由google和com构成),最后可以有一个表示根域的点(在规范中,最后有一个点的才是完整域名,但一般认为包括两个以上名字的域名也是完整域名,哪怕后面没有点).

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章