ORACLE 正则表达式摘录笔记

合集下载

oracle正则表达式

oracle正则表达式

POSIX 正则表达式由标准的元字符(metacharacters)所构成:
'^' 表示字符串的开始
'$' 表示字符串的结束
'.' 表示任何字符
字符的范围,比如说'[a-z]',表示任何ASCII 小写字母,与字符类"[[:lower:]]"" 等价
'?' 允许一个后继字符匹配零次或一次
REGEXP_LIKE 与LIKE 操作符相似。如果第一个参数匹配正则表达式它就解析为TRUE。例如Where REGEXP_LIKE(ENAME,'^J[AO]','i') 将在ENAME 以JA 或JO 开始的情况下返回一行数据。'I' 参数指定正则表达式是大小写敏感的。另外还可以在CHECK 约束和函数索引中指定REGEXP_LIKE。例如:
Oracle 8 和Oracle 9i中缺乏灵活性的SQL 正则表达式最终在Oracle 10g中得到了解决。Oracle 数据库目前内建了符合POSIX 标准的正则表达式。
四个新的函数分别是:REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR、和EGEXP_REPLACE。它们在用法上与Oracle SQL 函数LIKE、INSTR、SUBSTR 和REPLACE 用法,但是它们使用POSIX 正则表达式代替了老的百分号(%)和通配符(_)字符。
REGEXP_INSTR 与INSTR 函数类似。它返回一个字符串中匹配一个正则表达式的第一个子串的开始位置。例如:
Select REGEXP_INSTR('The total is $400 for your purchase.','$[[:digit:]] ')

Oracle数据库正则表达式

Oracle数据库正则表达式

Oracle数据库正则表达式正则表达式:⽆论是在前端还是后台正则表达式都是⼀个⾄关重要的知识点,例如判断⼀个⼿机号码输⼊是否正确,如果使⽤Java、C或者其他语⾔进⾏字符串进⾏判断,也许写⼏⼗⾏代码都不⼀定能解决,⽽且漏洞百出,⽽使⽤正则表达式,⼀⾏代码则可轻易解决,下⾯是举例说明正则表达式的⽤法:1: \d 代表⼀个(阿拉伯数字)任意数字 例如:判断⽤户输⼊的是否为11位数字(当然⼿机号码是不能这么简答的表达,只是解释⼀下\d的⽤法)1select'ok'2from dual3where regexp_like('188****5678','\d\d\d\d\d\d\d\d\d\d\d')2: . 代表⼀个(任意字母)任意字母 这⾥需要注意的是,如果输⼊的数字确实需要字母 . 的话,不能直接输 . 要转换⼀下格式,输⼊ \. 即可,这个需要注意。

3: [[:number:]] ⼀个任意数字(可以使⼗六进制) 这个⽤的并不多,如果现实⼗六进制,可以使⽤如下⽅式即可1select'ok'2from dual3where regexp_like('str','[0-9a-fA-F]')4: [[:alpha:]] ⼀个任意⼤⼩写字母5: [ ] 匹配到⽅括号内的其中⼀个字母 ⽅括号中只能匹配到其中的任意⼀个字母,或者是7 或者是8或者是9,只能是1个1select'ok'2from dual3where regexp_like('8','[379]') 例如下⾯的就是ASCII码中,数字3到ASCII码⼩写的 a 其中的任意⼀个字符的匹配1select'ok'2from dual3where regexp_like('9','[3-a]') 当然如果是12345678这样的连续的数字可以这么写1select'ok'2from dual3where regexp_like('str','[1-8]') 如果是要匹配 12345678 中的其中⼀个,或者是字母 a也⾏,就可以这么写,a可以写到前边,也可以写到后⾯,这并⽆所谓,因为只匹配⼀个⽽已1select'ok'2from dual3where regexp_like('str','[a1-8]')6: () 单词匹配 单词匹配,⼀般⽤竖线隔开,例如:⼩明喜欢吃苹果或者⾹蕉或者樱桃,此时就应该是⽤单词的匹配,在圆括号中任选⼀个。

oracle的正则表达式语法

oracle的正则表达式语法

oracle的正则表达式语法Oracle的正则表达式语法正则表达式在计算机编程中是非常重要的,它可以帮助我们轻松地匹配、查找和替换文本中的特定字符序列。

Oracle数据库也支持正则表达式,因此,本文将介绍Oracle的正则表达式语法。

1. 字符类:正则表达式中的字符类可以表示一组字符中的任何一个字符。

在Oracle中,我们可以使用方括号([])来表示字符类,如下所示:[abc]:表示a、b或c中的任何一个字符。

[^abc]:表示除a、b或c以外的任何一个字符。

[a-z]:表示从a到z中的任何一个小写字母。

[A-Z]:表示从A到Z中的任何一个大写字母。

[0-9]:表示从0到9中的任何一个数字。

2. 元字符:正则表达式中的元字符有特殊的含义,可以用来表示空格、数字、特殊字符等。

在Oracle中,我们可以使用以下元字符:\d:表示任何一个数字,等效于[0-9]。

\D:表示除数字以外的任何一个字符,等效于[^0-9]。

\s:表示任何一个空格字符,等效于[ \t\n\r\f\v]。

\S:表示除空格字符以外的任何一个字符。

\w:表示任何一个字母、数字或下划线字符,等效于[a-zA-Z0-9_]。

\W:表示除字母、数字和下划线以外的任何一个字符。

.:表示除换行符以外的任何一个字符。

3. 重复符号:正则表达式中的重复符号可以表示重复出现的字符或字符序列。

在Oracle中,我们可以使用以下重复符号:*:表示重复0次或多次。

+:表示重复1次或多次。

:表示重复0次或1次。

{n}:表示重复n次。

{n,}:表示重复n次或多次。

{n,m}:表示重复n到m次。

4. 边界符号:正则表达式中的边界符号可以表示待查找字符串的边界,如单词的开头或结尾。

在Oracle中,我们可以使用以下边界符号:^:表示字符串的开头。

$:表示字符串的结尾。

\b:表示单词边界,例如字母和空格之间的边界。

\B:表示除单词边界以外的任何一个位置。

5. 分组和反向引用:正则表达式中的分组可以一组字符视为一个整体,并对整个字符组进行操作。

oracle sql正则表达式

oracle sql正则表达式

oracle sql正则表达式Oracle SQL正则表达式使用`REGEXP_LIKE`和`REGEXP_REPLACE`等函数。

`REGEXP_LIKE`函数用于在查询中应用正则表达式模式匹配。

它的一般语法是:```sqlSELECT column1, column2, ...FROM table_nameWHERE REGEXP_LIKE(column_name, 'pattern', 'start', 'match');```其中,`column_name`是要进行模式匹配的列名,`pattern`是正则表达式模式,`start`是可选的起始位置,`match`是可选的匹配类型。

例如,要查询以数字开头和结尾,长度为7位的字符串,可以使用以下查询:```sqlSELECTFROM fzqWHERE REGEXP_LIKE(value, '^[0-9]{6}[0-9]$');```REGEXP_REPLACE`函数用于在查询中应用正则表达式替换。

它的一般语法是:```sqlSELECT REGEXP_REPLACE(column_name, 'pattern', 'replacement','start', 'count', 'match')FROM table_name;```其中,`column_name`是要进行替换的列名,`pattern`是正则表达式模式,`replacement`是替换字符串,`start`是可选的起始位置,`count`是可选的替换次数,`match`是可选的匹配类型。

例如,要将字符串中的所有数字替换为空字符串,可以使用以下查询:```sqlSELECT REGEXP_REPLACE(column_name, '[0-9]', '', 1, 0, 'i')FROM table_name;```注意:在Oracle SQL中,正则表达式默认是不区分大小写的,如果要进行区分大小写的匹配,可以使用`'i'`作为匹配类型。

oracle正则表达式

oracle正则表达式

Oracle Database 10g中的正规表达式特性是一个用于处理文本数据的强大工具Oracle Database 10g的一个新特性大大提高了您搜索和处理字符数据的能力。

这个特性就是正规表达式,是一种用来描述文本模式的表示方法。

很久以来它已在许多编程语言和大量UNIX 实用工具中出现过了。

Oracle 的正规表达式的实施是以各种SQL 函数和一个WHERE子句操作符的形式出现的。

如果您不熟悉正规表达式,那么这篇文章可以让您了解一下这种新的极其强大然而表面上有点神秘的功能。

已经对正规表达式很熟悉的读者可以了解如何在Oracle SQL 语言的环境中应用这种功能。

什么是正规表达式?正规表达式由一个或多个字符型文字和/或元字符组成。

在最简单的格式下,正规表达式仅由字符文字组成,如正规表达式cat。

它被读作字母c,接着是字母a和t,这种模式匹配cat、location和catal og之类的字符串。

元字符提供算法来确定Oracle 如何处理组成一个正规表达式的字符。

当您了解了各种元字符的含义时,您将体会到正规表达式用于查找和替换特定的文本数据是非常强大的。

验证数据、识别重复关键字的出现、检测不必要的空格,或分析字符串只是正规表达式的许多应用中的一部分。

您可以用它们来验证电话号码、邮政编码、电子邮件地址、社会安全号码、IP 地址、文件名和路径名等的格式。

此外,您可以查找如HTML 标记、数字、日期之类的模式,或任意文本数据中符合任意模式的任何事物,并用其它的模式来替换它们。

用Oracle Database 10g使用正规表达式您可以使用最新引进的Oracle SQL REGEXP_LIKE操作符和REGEXP_INSTR、REGE XP_SUBSTR以及REGEXP_REPLACE函数来发挥正规表达式的作用。

您将体会到这个新的功能如何对LIKE操作符和INSTR、SUBSTR和REPLACE函数进行了补充。

orcl中用正则表达式

orcl中用正则表达式

orcl中用正则表达式在Oracle中,你可以使用正则表达式来执行各种字符串操作,例如搜索、替换、提取等。

Oracle的正则表达式功能主要通过`REGEXP_SUBSTR`、`REGEXP_INSTR`、`REGEXP_REPLACE`等函数提供。

以下是一些在Oracle中使用正则表达式的示例:1. 使用`REGEXP_SUBSTR`提取字符串假设你想从某个字符串中提取所有的数字:```sqlSELECT REGEXP_SUBSTR('abc123def456', '[0-9]+') FROM dual;```这会返回`123`和`456`。

2. 使用`REGEXP_INSTR`查找字符串查找某个字符串在另一个字符串中的位置:```sqlSELECT REGEXP_INSTR('abc123def456', '[0-9]+') FROM dual;```这会返回数字`4`,表示第一个数字(123)开始于位置4。

3. 使用`REGEXP_REPLACE`替换字符串替换所有匹配正则表达式的子串:```sqlSELECT REGEXP_REPLACE('abc123def456', '[0-9]+', 'XX') FROM dual;```这会返回`abcXXdefXX`。

4. 使用复杂的正则表达式例如,如果你想从字符串中提取所有由字母组成的子串:```sqlSELECT REGEXP_SUBSTR('abc123def456', '[a-zA-Z]+') FROM dual;```这会返回`abc`和`def`。

5. 分组和捕获使用括号进行分组和捕获:```sqlSELECT REGEXP_SUBSTR('abc123def456', '([a-z]+)([0-9]+)', 1, 1, NULL, 1) FROM dual;```这将返回`abc`,因为它是第一个匹配的子串。

oracle sql 年月正则表达式

oracle sql 年月正则表达式

Oracle SQL中的年月正则表达式是指能够匹配特定格式的年月信息的正则表达式。

在实际的数据处理中,经常需要对年月信息进行提取、比较、筛选等操作,而正则表达式正是一个强大的工具,能够帮助我们轻松地处理这些任务。

1. 年月正则表达式的基本结构在Oracle SQL中,用于匹配年月信息的正则表达式的基本结构是由数字和特定的分隔符组成的。

一般而言,年月信息的格式可以是"yyyy-mm"、"yyyy/mm"、"yyyymm"等形式,因此我们需要编写相应的正则表达式来进行匹配。

2. 匹配四位年份和两位月份如果我们需要匹配的年月信息的格式是"yyyy-mm",那么对应的正则表达式可以是"\b\d{4}-\d{2}\b"。

其中,"\b"表示单词边界,"\d"表示数字,"{4}"表示恰好匹配4个数字,"-"表示匹配连字符,"{2}"表示恰好匹配2个数字。

3. 匹配四位年份和两位月份如果我们需要匹配的年月信息的格式是"yyyy/mm",那么对应的正则表达式可以是"\b\d{4}/\d{2}\b"。

其中,"\b"表示单词边界,"\d"表示数字,"{4}"表示恰好匹配4个数字,"/"表示匹配斜杠,"{2}"表示恰好匹配2个数字。

4. 匹配六位年份和两位月份如果我们需要匹配的年月信息的格式是"yyyymm",那么对应的正则表达式可以是"\b\d{6}\d{2}\b"。

其中,"\b"表示单词边界,"\d"表示数字,"{6}"表示恰好匹配6个数字,"{2}"表示恰好匹配2个数字。

Oracle笔记

Oracle笔记

查看当前用户所有表:Select * from tab;连接符:||空值:is null除去重复行:distinct查询结果排序:order by 排序字段asc(desc)比较运算符:> < (!= or <>) between andin 操作not in模糊查询Like使用:“ %”:代表匹配任意长度的任意字符。

“_”:代表匹配一个长度的任意字符。

特殊字符使用ESCAPE 标示:select * from posgoods where pgcname like '%*_%' escape '*';查询posgoods表中pgcname 字段中有‘_’字符的结果。

escape '*' 表示* 字符后面的是字符代表其实际意思,不做转义字符。

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

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

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

'$' 匹配输入字符串的结尾位置。

如果设置了RegExp 对象的Multiline 属性,则$ 也匹配'\n' 或'\r'。

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

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

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

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

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

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

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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ORACLE 正则表达式一.正则表达式简介:正则表达式,就是以某种模式来匹配一类字符串。

一旦概括了某类字符串,那么正则表达式即可用于针对字符串的各种相关操作。

例如,判断匹配性,进行字符串的重新组合等。

正则表达式提供了字符串处理的快捷方式。

Oracle 10g及以后的版本中也支持正则表达式.二. 正则表达式相对通配符的优势:1.正则表达式中不仅存在着代表模糊字符的特殊字符,而且存在着量词等修饰字符,使得模式的控制更加灵活和强大。

2.通配符的使用一般是在特定的环境下,不同的环境下,通配符有可能不同。

而正则表达式,不但广泛应用于各种编程语言,而且在各种编程语言中,保持了语法的高度一致性。

三. 元字符:元字符是指在正则表达式中表示特殊含义的字符。

量词用来指定量词的前一个字符出现的次数。

量词的形式主要有“?”、“*”、“+”、“{}”。

量词在用于匹配字符串时,默认遵循贪婪原则。

贪婪原则是指,尽可能多地匹配字符。

例如:字符串“Function(p),(OK)”,如果使用正则表达式“\(.*\)”进行匹配,则得到字符串“(p),(OK)” ,而非“(p)”;若欲得到“(p)”,则必须取消量词的贪婪原则,此时只需要为量词后追加另外一个数量词“?”即可。

如上面的正则表达式应该改为“\(.*?\)”。

五. 字符转义:元字符在正则表达式中有特殊含义。

如果需要使用其原义,则需要用到字符转义。

字符转义使用字符“\”来实现。

其语法模式为:“\”+元字符。

例如,“\.”表示普通字符“.”;“\.doc”匹配字符串“.doc”;而普通字符“\”需要使用“\\”来表示。

六. 字符组.字符组是指将模式中的某些部分作为一个整体。

这样,量词可以来修饰字符组,从而提高正则表达式的灵活性。

字符组通过()来实现.许多编程语言中,可以利用“$1”、“$2”等来获取第一个、第二个字符组,即所谓的后向引用。

在Oracle中,引用格式为“\1”、“\2”。

七. 正则表达式分支可以利用“|”来创建多个正则表达式分支。

例如,“\d{4}|\w{4}”可以看做两个正则表达式——“\d{4}”和“\w{4}”,匹配其中任何一个正则表达式的字符串都被认为匹配整个正则表达式。

如果该字符串两个正则表达式分支都匹配,那么将被处理为匹配第一个正则表达式分支。

八. 字符类.在Oracle中,正则表达式的用法与标准用法略有不同。

这种不同主要体现在对于字符类的定义上。

Orale中不使用字符“\”与普通字符组合的形式来实现字符九. ORACLE中的四个正则表达式相关函数.1.regexp_like(expression, regexp)返回值为一个布尔值。

如果第一个参数匹配第二个参数所代表的正则表达式,那么将返回真,否则将返回假。

举例:select * from people where regexp_like(name, '^J.*$');相当于: select * from people where name like 'J%';2.regexp_instr(expression, regexp, startindex, times)返回找到的匹配字符串的位置.参数startindex表示开始进行匹配比较的位置;参数times表示第几次匹配作为最终匹配结果。

举例:select regexp_instr('12.158', '\.') position from dual;regexp_instr('12.158', '\.')用于获取第一个小数点的位置。

3.regexp_substr(expression, regexp)返回第一个字符串参数中,与第二个正则表达式参数相匹配的子字符串。

举例: create table html(id integer, html varchar2(2000));insert into htmlvalues (1, '<a href="/2009/1009.html">maillink</a>');表html中存储了HTML标签及内容。

现欲从标签<a>中获得链接的url,那么可以利用regexp_substr()函数。

select id, regexp_substr(html, 'http[a-zA-Z0-9\.:/]*') url from html;4. regexp_replace(expression, regexp, replacement)将expression中的按regexp匹配到的部分用replacement代替.在参数replacement中,可以含有后向引用,以便将正则表达式中的字符组重新捕获。

例如,某些国家和地区的日期格式可能为“MM/DD/YYYY”,那么可以利用regexp_replace()函数来转换日期格式。

select regexp_replace('09/29/2008', '^([0-9]{2})/([0-9]{2})/([0-9]{4})$', '\3-\1-\2') replacefrom dual;注: 在进行正则表达式匹配时,还可以忽略字符大小写形式进行匹配.但是不能解除[[:upper:]]和[[:lower:]]的作用.select * from people where regexp_like(name, 'or');select * from people where regexp_like(name, 'or', 'i'); --…i‟表示忽略大小写十. 正则表达式练习第一:REGEXP_LIKE函数用法EMP表结构如下:SQL> desc emp;Name Null? Type----------------------------------------- -------- ----------------------------EMPNO NOT NULL NUMBER(4) ENAMEVARCHAR2(10)JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATESAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2)EMP表中部分数据如下:SQL> select empno,ename,sal,hiredate from emp;EMPNO ENAME SAL HIREDATE---------- ---------- ---------- --------------7369 SMITH 800 17-12月-807499 ALLEN 1600 20-2月-817521 WARD 1250 22-2月-817566 JONES 2975 02-4月-81下面给出几种REGEXP_LIKE函数的例子1、查找员工编号为4位数字的员工信息SQL> select empno,ename from emp where regexp_like(empno,'^[[:digit:]]{4}$');或者: select empno,ename from emp where regexp_like(empno,'^[0-9]$');EMPNO ENAME---------- ----------7369 SMITH7499 ALLEN7521 WARD7566 JONES2、查找员工姓名为全英文的员工信息SQL> select empno,ename from emp where regexp_like(ename,'^[[:alpha:]]+$');或者: select * from emp where regexp_like(ename,'^[a-zA-Z]+$');EMPNO ENAME---------- ----------7369 SMITH7499 ALLEN7521 WARD7566 JONES7654 MARTIN3、查找员工姓名以“a”字母开头,不区分大小写SQL> select empno,ename from emp where regexp_like(ename,'^a','i');EMPNO ENAME---------- ----------7499 ALLEN7876 ADAMS4、查找员工姓名为全英文,且以“N”结尾的员工信息SQL> select empno,ename from emp where regexp_like(ename,'^[[:alpha:]]+N$');EMPNO ENAME---------- ----------7499 ALLEN7654 MARTIN5、查找员工编号以非数字开头的员工信息SQL> select empno,ename from emp where regexp_like(empno,'[^[:digit:]]');no rows selected第二:REGEXP_INSTR函数用法1、查找员工编号中第一个非数字字符的位置SQL> select regexp_instr(empno,'[^[:digit:]]') position from emp;POSITION----------2、从第三个字符开始,查找员工编号中第二个非数字字符的位置SQL> select regexp_instr(empno,'[^[:digit:]]',3,2) position from emp; POSITION----------第三:REGEXP_SUBSTR函数用法1、返回从ename的第二个位置开始查找,并且是以“L”开头到结尾的字串SQL> select regexp_substr(ename,'L.*','2') substr from emp;SUBSTR------------------LLENLAKELARK第四:REGEXP_REPLACE函数用法1、把ename中所有非字母字符替换为“A”SQL> update emp set ename=regexp_replace(ename, '[^[:alpha:]]', 'A')2 where regexp_like(ename, '[^[:alpha:]]');1 row updated。

相关文档
最新文档