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的正则表达式oracle的正则表达式(regular expression)简单介绍目前,正则表达式已经在很多软件中得到广泛的应用,包括*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之外的任何单字符。

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

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

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

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

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

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

'|' 指明两项之间的一个选择。

例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的字符串。

\num 匹配num,其中num 是一个正整数。

对所获取的匹配的引用。

正则表达式的一个很有用的特点是可以保存子表达式以后使用,被称为Backreferencing. 允许复杂的替换能力如调整一个模式到新的位置或者指示被代替的字符或者单词的位置. 被匹配的子表达式存储在临时缓冲区中,缓冲区从左到右编号, 通过\数字符号访问。

orcl正则

orcl正则

Oracle正则表达式语法基于Perl语言的正则表达式语法,区分大小写(case sensitive)。

以下是一些基本语法:
1. 字符匹配:`.` 匹配除了换行外的任意一个字符;`\d` 匹配任何数字,相当于`[0-9]`;`\D` 匹配任何非数字字符,相当于`[^0-9]`;`\w` 匹配任何字母数字字符或下划线,相当于`[a-zA-Z0-9_]`;`\W` 表示匹配任何非字母数字字符或下划线,相当于`[^a-zA-Z0-9_]`。

2. 限定符:`*` 匹配前一个字符出现0次或多次;`+` 匹配前一个字符出现1次或多次;`?` 匹配前一个字符出现0次或1次;`{n}` 匹配前一个字符出现n次;`{n,}` 匹配前一个字符出现n次或更多;`{n,m}` 匹配前一个字符出现n~m次。

`|` 指两项之间的一个选择。

例如,`^([a-z]+|[0-9]+)$` 表示所有小写字母或数字组合成的字符串。

3. 边界匹配:`^` 匹配开始位置;`$` 匹配结束位置;`\b` 匹配单词边界,即单词的开头或结尾位置;`\B` 匹配非单词边界,即不是单词的开头或结尾位置。

4. 分组和引用:括号`()` 分组,标记一个子表达式的开始和结束位置;`\num` 引用第num个子表达式,num从1开始。

5. 字符集合:`[]` 表示一组字符中的任意一个。

6. 转义符:`\\` 表示转义一个字符。

Oracle正则表达式还支持贪婪匹配、非贪婪匹配、零宽断言(zero-width assertion)、后向引用(backreference)、捕获组等高级语法。

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 regexp用法

oracle regexp用法

oracle regexp用法Oracle数据库中的正则表达式(Regexp)函数提供了强大的模式匹配功能,可以在字符串中搜索、替换和提取特定模式的数据。

1. REGEXP_LIKE函数:用于检查一个字符串是否与指定的模式匹配。

例如,我们可以使用REGEXP_LIKE函数来检查一个字符串是否是有效的电子邮件地址:SELECT emailFROM usersWHERE REGEXP_LIKE(email, '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$');这将返回所有符合指定电子邮件地址模式的用户。

2. REGEXP_SUBSTR函数:用于从一个字符串中提取满足指定模式的子字符串。

例如,我们可以使用REGEXP_SUBSTR函数从一个字符串中提取出所有的数字字符:SELECT REGEXP_SUBSTR('abc123def456', '[0-9]+') AS resultFROM dual;这将返回字符串中所有满足模式[0-9]+(即连续的数字字符)的子字符串。

3. REGEXP_REPLACE函数:用于将一个字符串中满足指定模式的部分替换为新的字符串。

例如,我们可以使用REGEXP_REPLACE函数将一个字符串中的所有数字字符替换为“#”:SELECT REGEXP_REPLACE('abc123def456', '[0-9]+', '#') AS resultFROM dual;这将返回字符串中所有的数字字符被替换为“#”后的结果。

这只是Oracle Regexp的一些常见用法示例,实际上,Oracle还提供了许多其他强大的Regexp函数和操作符,可以用于更复杂的模式匹配和处理需求。

在使用Regexp函数时,需要熟悉Regexp的语法规则和各种模式匹配表达式,以便灵活运用于实际场景中。

oracle regex 正则表达式

oracle regex 正则表达式

oracle regex 正则表达式Oracle正则表达式(Regex)是一种强大的工具,用于在数据库中进行模式匹配和字符串处理。

使用Oracle的正则表达式功能,可以快速、高效地提取、替换和验证数据。

本文将介绍Oracle正则表达式的基本语法和常用功能,帮助读者更好地理解和应用正则表达式。

一、正则表达式介绍正则表达式是一种描述字符模式的语言,可以通过正则表达式来匹配、查找和操作字符串。

Oracle引入了Perl风格的正则表达式,提供了丰富的模式匹配功能。

二、基本语法Oracle正则表达式的模式由各种字符和特殊字符组成。

下面是一些常用的特殊字符:1. 常用元字符:- . 匹配任意字符- \d 匹配数字- \w 匹配字母、数字、下划线- \s 匹配空白字符2. 量词:- * 匹配0个或多个字符- + 匹配1个或多个字符- ? 匹配0个或1个字符- {n} 匹配n个字符- {n,} 匹配至少n个字符- {n,m}匹配n到m个字符3. 字符类:- [] 匹配方括号内的任意字符- [^] 匹配不在方括号内的任意字符三、常用功能1. 字符串匹配:使用正则表达式可以在数据库中进行字符串匹配,从而找到符合特定模式的数据。

例如,可以通过正则表达式找到所有以"A"开头的字符串,或者找到所有包含特定字符的字符串。

2. 字符串替换:正则表达式还可以用于字符串替换。

可以使用正则表达式将字符串中的某些部分替换为其他内容。

例如,可以将所有的电话号码替换为特定的格式。

3. 字符串提取:使用正则表达式可以快速提取字符串中的特定部分。

例如,可以从邮件地址中提取出用户名和域名。

4. 数据验证:正则表达式还可以用于数据验证,确保数据符合特定的格式要求。

例如,可以使用正则表达式验证电话号码、邮件地址等数据的有效性。

四、使用示例下面是一些使用Oracle正则表达式的示例:1. 查找所有以"A"开头的字符串:SELECT column_name FROM table_name WHERE REGEXP_LIKE(column_name, '^A.*');2. 替换字符串中的数字为"X":SELECT REGEXP_REPLACE(column_name, '\d', 'X') FROM table_name;3. 提取邮件地址的用户名和域名:SELECT REGEXP_SUBSTR(email, '(\w+)@(\w+\.\w+)') FROM table_name;4. 验证电话号码的有效性:SELECT column_name FROM table_name WHERE REGEXP_LIKE(column_name, '^\d{3}-\d{4}-\d{4}$');五、总结本文介绍了Oracle正则表达式的基本语法和常用功能。

第21章 Oracle中的正则表达式

第21章  Oracle中的正则表达式

21.4
本章实例
在进行正则表达式匹配时,还可以忽略字符大小写形 式进行匹配。这是比使用LIKE判式更加灵活和方便之处。 select * from people where regexp_like(name, 'or'); select * from people where regexp_like(name, 'or', 'i');
21.2.6
Oracle中正则表达式的特殊性
[[:alnum:]]:表示任意字母和数字。 [[:space:]]:表示任意空白字符,正则表达式的一般语 法为\s。
[[:upper:]]:表示任意大写字母。
[[:punct:]]:表示任意标点符号。 [[:xdigit:]]:表示任意16进制的数字,相当于[0-9a-fAF]。
21.3 正则都提供了对正则表达式的支 持。而这种支持,主要是通过提供函数来体现的。Oracle中 共有四个正则表达式相关函数,它们分别是: regexp_like()


regexp_instr()
regexp_substr() regexp_replace()
21.6
习题
1.简述正则表达式与通配符的区别。 2.简述正则表达式匹配时的贪婪原则。 3.简述Oracle正则表达式的特殊性。
4.利用regexp_replace()函数将YYYY-MM-DD格式 的字符串,转换为MM/DD/YYYY格式。
22.1.2
正则表达式与编程语言
在各种编程语言中,可以说,正则表达式是无处不在 的。正则表达式在各种编程语言中高度统一,都遵循一致的 语法。因此,一旦熟悉了一种编程语言中的正则表达式,那 么,可以直接应用于其他编程语言。编程语言同时也是正则 表达式的载体,没有编程语言,正则表达式的作用将无从发 印
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

oracle的正则表达式oracle的正则表达式(regular expression)简单介绍目前,正则表达式已经在很多软件中得到广泛的应用,包括*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之外的任何单字符。

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

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

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

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

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

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

'|' 指明两项之间的一个选择。

例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的字符串。

\num 匹配num,其中num 是一个正整数。

对所获取的匹配的引用。

正则表达式的一个很有用的特点是可以保存子表达式以后使用,被称为Backreferencing. 允许复杂的替换能力如调整一个模式到新的位置或者指示被代替的字符或者单词的位置. 被匹配的子表达式存储在临时缓冲区中,缓冲区从左到右编号, 通过\数字符号访问。

下面的例子列出了把名字aa bb cc 变成cc, bb, aa.Select REGEXP_REPLACE('aa bb cc','(.*) (.*) (.*)', '\3, \2, \1') FROM dual;REGEXP_REPLACE('ELLENHILDISMITcc, bb, aa'\' 转义符。

字符簇:[[:alpha:]] 任何字母。

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

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

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

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

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

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

[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]。

各种操作符的运算优先级\ 转义符(), (?, (?=), [] 圆括号和方括号*, +, ?, {n}, {n,}, {n,m} 限定符^, $, \anymetacharacter 位置和顺序| “或”操作--测试数据create table test(mc varchar2(60));insert into test values('112233445566778899');insert into test values('22113344 5566778899');insert into test values('33112244 5566778899');insert into test values('44112233 5566 778899');insert into test values('5511 2233 4466778899');insert into test values('661122334455778899');insert into test values('771122334455668899');insert into test values('881122334455667799');insert into test values('991122334455667788');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('ab123');insert into test values('123xy');insert into test values('007ab');insert into test values('abcxy');insert into test values('The final test is is is how to find duplicate words.');commit;一、REGEXP_LIKEselect * from test where regexp_like(mc,'^a{1,3}');{}的意思是连续几个的匹配上面的sql的意思是开头有1个到3个连续aselect * from test where regexp_like(mc,'a{1,3}');有连续3个aselect * from test where regexp_like(mc,'^a.*e$');以a开头以e结尾的字符之所以有.是因为如果写成^a*e$就变成以a开头中间都是a以e结尾的字符拉*的意思是匹配它前面的字符^ab*e$可否查出以a开头以e结尾的字符呢?答案是否定的因为*虽然是可以匹配前面的b0次或者多次但是它也仅仅是匹配以a开头中间可以有b并且都是b,或者中间没有字符,以e结尾的字符.'^[[:alpha:]]+$'的意思是以字母从开头到结尾都包含字母的字符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:]]');"^"就是一个有多种意义的字符元,主要看语意环境如果"^"是字符列中的第一个字符,就表示对这个字符串取反,因此, [^[:digit:]]就是表示查找非数字的模式即字符中不都是数字Select mc FROM test Where REGEXP_LIKE(mc,'^[^[:digit:]]');以非数字开头的字符二、REGEXP_INSTRSelect REGEXP_INSTR(mc,'[[:digit:]]$') from test;Select REGEXP_INSTR(mc,'[[:digit:]]+$') from test;Select REGEXP_INSTR('The price is $400.','\$[[:digit:]]+') FROM DUAL;Select REGEXP_INSTR('onetwothree','[^[[:lower:]]]') FROM DUAL;Select REGEXP_INSTR(',,,,,','[^,]*') FROM DUAL;Select REGEXP_INSTR(',,,,,','[^,]') FROM DUAL;三、REGEXP_SUBSTRSELECT REGEXP_SUBSTR(mc,'[a-z]+') FROM test;SELECT REGEXP_SUBSTR(mc,'[0-9]+') FROM test;SELECT REGEXP_SUBSTR('aababcde','^a.*b') FROM DUAL;四、REGEXP_REPLACESelect REGEXP_REPLACE('Joe Smith','( ){2,}', ',') AS RX_REPLACE FROM dual;Select REGEXP_REPLACE('aa bb cc','(.*) (.*) (.*)', '\3, \2, \1') FROM dual;。

相关文档
最新文档