`
dacoolbaby
  • 浏览: 1267500 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

[转]Oracle中使用正则表达式

阅读更多

Oracle10开始支持正则表达式。

介绍内容如下:

ORACLE中的支持正则表达式的函数主要有下面四个:
1,REGEXP_LIKE :         与LIKE的功能相似
2,REGEXP_INSTR :       与INSTR的功能相似
3,REGEXP_SUBSTR :    与SUBSTR的功能相似
4,REGEXP_REPLACE : 与REPLACE的功能相似
它们在用法上与Oracle SQL 函数LIKE、INSTR、SUBSTR 和REPLACE 用法相同,
但是它们使用POSIX 正则表达式代替了老的百分号(%)和通配符(_)字符。
POSIX 正则表达式由标准的元字符(metacharacters)所构成:
'^' 匹配输入字符串的开始位置,在方括号表达式中使用,此时它表示不接受该字符集合。
'$' 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹
配 '/n' 或 '/r'。
'.' 匹配除换行符之外的任何单字符。
'?' 匹配前面的子表达式零次或一次。
'+' 匹配前面的子表达式一次或多次。
'*' 匹配前面的子表达式零次或多次。
'|' 指明两项之间的一个选择。例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的
字符串。
'( )' 标记一个子表达式的开始和结束位置。
'[]' 标记一个中括号表达式。
'{m,n}' 一个精确地出现次数范围,m=<出现次数<=n,'{m}'表示出现m次,'{m,}'表示至少
出现m次。
/num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。
字符簇:
[[:alpha:]] 任何字母。
[[:digit:]] 任何数字。
[[:alnum:]] 任何字母和数字。
[[:space:]] 任何白字符。
[[:upper:]] 任何大写字母。
[[:lower:]] 任何小写字母。
[[:punct:]] 任何标点符号。
[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]。
各种操作符的运算优先级
/转义符
(), (?:), (?=), [] 圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, anymetacharacter 位置和顺序
|
*/

--创建表
create table fzq
(
  id varchar(4),
  value varchar(10)
);
--数据插入
insert into fzq values('1','1234560');  
insert into fzq values('2','1234560');  
insert into fzq values('3','1b3b560');  
insert into fzq values('4','abc');  
insert into fzq values('5','abcde');  
insert into fzq values('6','ADREasx');  
insert into fzq values('7','123  45');  
insert into fzq values('8','adc  de');  
insert into fzq values('9','adc,.de');  
insert into fzq values('10','1B');  
insert into fzq values('10','abcbvbnb');  
insert into fzq values('11','11114560');  
insert into fzq values('11','11124560');  
commit;

 

--regexp_like
--查询value中以1开头60结束的记录并且长度是7位
select * from fzq where value like '1____60';
select * from fzq where regexp_like(value,'1....60');
--查询value中以1开头60结束的记录并且长度是7位并且全部是数字的记录。
--使用like就不是很好实现了。
select * from fzq where regexp_like(value,'1[0-9]{4}60');
-- 也可以这样实现,使用字符集。
select * from fzq where regexp_like(value,'1[[:digit:]]{4}60');
-- 查询value中不是纯数字的记录
select * from fzq where not regexp_like(value,'^[[:digit:]]+$');
-- 查询value中不包含任何数字的记录。
select * from fzq where regexp_like(value,'^[^[:digit:]]+$');
--查询以12或者1b开头的记录.不区分大小写。
select * from fzq where regexp_like(value,'^1[2b]','i');
--查询以12或者1b开头的记录.区分大小写。
select * from fzq where regexp_like(value,'^1[2B]');
-- 查询数据中包含空白的记录。
select * from fzq where regexp_like(value,'[[:space:]]');
--查询所有包含小写字母或者数字的记录。
select * from fzq where regexp_like(value,'^([a-z]+|[0-9]+)$');
--查询任何包含标点符号的记录。
select * from fzq where regexp_like(value,'[[:punct:]]');
/*
理解它的语法就可以了。其它的函数用法类似。
*/ 

 

转自:

作者:tshfang
来源: 泥胚文章写作 http://www.nipei.com 原文地址: http://www.nipei.com/article/9865

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

根据本人测试,Oracle只是支持最基础的正则表达式功能。

 

诸如30分钟正则表达式中,匹配XX的前面是AAA的这样的功能还不能完美支持。

正则表达式是对开发人员友好,个人建议还是放在APP里面进行处理比较好。

分享到:
评论

相关推荐

    Oracle中的正则表达式

    * 元字符和普通字符:元字符是指在正则表达式中表示特殊含义的字符,如"."、"\"、"?"、"*"、"+"、"|",等等。普通字符是指除元字符外的所有 Unicode 字符。 * 量词:量词用来指定量词的前一个字符出现的次数,如"?",...

    Oracle数据库正则表达式

    同时,正则表达式也可以与其他 Oracle 函数结合使用,例如 substr()、replace()、instr() 等,来实现更加复杂的数据处理任务。 正则表达式是 Oracle 数据库中的一种强大的工具,可以帮助用户快速、高效地处理数据。

    Oracle正则表达式详解(用法+实例)

    ### Oracle正则表达式详解(用法+实例) #### 一、正则表达式简介 正则表达式是一种用于匹配字符串中字符组合的工具。它由一个或多个字符及特殊的字符元组成,能够帮助我们执行复杂的字符串搜索和替换任务。在...

    ORACLE正则表达式

    ORACLE 正则表达式的使用(REGEXP_LIKE REGEXP_INSTR REGEXP_SUBSTR REGEXP_REPLACE)

    Oracle 10g 针对正则表达式的支持分析

    - **集成到SQL语句中**:可以直接在SQL查询中使用正则表达式进行条件过滤,无需编写额外的程序代码。 ##### 3.2 实现方法 - **REGEXP_LIKE**:用于判断一个字符串是否符合指定的正则表达式模式。 - **REGEXP_INSTR*...

    ORACLE.PLSQL正则表达式概述

    例如,在`WHERE`子句中使用正则表达式可能无法利用索引,导致全表扫描,从而影响查询效率。 ### 结论 ORACLE.PLSQL中的正则表达式功能为数据库操作提供了极大的灵活性和便利性。无论是数据清洗、格式化还是复杂的...

    Oracle正则表达式函数全面解析

    在方括号表达式中使用时,表示不接受该字符集合。 - `$`:匹配输入字符串的结尾位置;如果设置了多行模式,则还匹配`\n`或`\r`。 - `.`:匹配除换行符之外的任何单个字符。 - `?`:匹配前面的子表达式零次或一次。 -...

    ORACLESQL正则表达式.pdf

    正则表达式是在 Oracle 10g 中添加的新特性,用于匹配字符串中的模式。下面是 ORACLE SQL 正则表达式的相关知识点: 匹配字符 * `[:alnum:]` 匹配任何字母和数字 * `[:alpha:]` 匹配任何字母 * `[:blank:]` 匹配...

    oracle正则表达式

    PDF文件"Oracle正则表达式函数介绍.pdf"很可能详细介绍了这些函数的使用方法、模式语法和实例,而"Oracle_正则表达式.txt"可能包含了更多示例或使用技巧。对于学习和理解Oracle正则表达式,这两个文件都是宝贵的资源...

    正则表达式在oracle中的应用

    2. **错误排查**:正则表达式中的错误排查通常比标准SQL语句更加困难。开发者需要熟悉正则表达式的语法和特性,以便能够准确地定位和解决问题。 3. **性能考虑**:尽管正则表达式提供了强大的查询能力,但在某些...

    正则表达式在Oracle中的应用与实现.pdf

    Oracle数据库中正则表达式的应用是指在Oracle数据库管理系统中使用正则表达式来实现高效的数据检索和处理。正则表达式是一种源于Unix的强大的数据检索技术,可以对搜索条件进行灵活的控制,对于规范的格式如电话号、...

    Oracle 总结的正则表达式带有详细的例子与解释

    POSIX字符类是正则表达式中的特殊字符集合,例如: - `[:alpha:]`:匹配所有字母字符(a-zA-Z)。 - `[:lower:]`:匹配所有小写字母。 - `[:upper:]`:匹配所有大写字母。 - `[:digit:]`:匹配所有数字。 - `[:alnum...

    Oracle通过正则表达式分割字符串 REGEXP_SUBSTR的代码详解

    position :起始位置,从第几个字符开始正则表达式匹配(默认为1) occurrence :标识第几个匹配组,默认为1 modifier :模式(‘i’不区分大小写进行检索;’c’区分大小写进行检索。默认为’c’) SELECT REGEXP_...

    Oracle 10g正则表达式

    正则表达式中的元字符有特殊含义,例如: - `^`:匹配输入字符串的开始位置。 - `$`:匹配输入字符串的结尾位置。 - `.`:匹配除换行符外的任何单个字符。 - `?`:匹配前面的子表达式零次或一次。 - `+`:匹配前面...

    正则表达式入门指导.ppt

    正则表达式中的`.`具有广泛性,它能匹配任何字符,包括空格和特殊字符。这有时会导致非预期的结果。为了解决这个问题,可以使用**字符类**(如`[a-z]`表示小写字母)或**否定预查**(如`[^a-z]`表示除小写字母外的...

Global site tag (gtag.js) - Google Analytics