共计 3396 个字符,预计需要花费 9 分钟才能阅读完成。
这篇文章主要介绍“怎么掌握 oracle 正则表达式”,在日常操作中,相信很多人在怎么掌握 oracle 正则表达式问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么掌握 oracle 正则表达式”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!
1. 正则表达式规范
(1). 匹配字符
字符类匹配的字符举 例 \d 从0-9的任一数字 \d\d 匹配 72, 但不匹配 aa 或 7a\D 任一非数字字符 \D\D\D 匹配 abc, 但不匹配 123\w 任一单词字符,包括 A -Z,a-z,0- 9 和下划线 \w\w\w\w 匹配 Ab-2,但不匹配∑£$%* 或 Ab_@\W 任一非单词字符 \W 匹配@,但不匹配 a\s 任一空白字符,包括制表符,换行符,回车符,换页符和垂直制表符匹配在 HTML,XML 和其他标准定义中的所有传统空白字符 \S 任一非空白字符空白字符以外的任意字符, 如 A% 等. 任一字符匹配除换行符以外的任意字符除非设置了 MultiLine 先项 […] 括号中的任一字符 [abc] 将匹配一个单字符,a,b 或 c.[a-z]将匹配从 a 到 z 的任一字符 [^…] 不在括号中的任一字符 [^abc] 将匹配一个 a、b、c 之外的单字符, 可以 a,b 或 A、B、C[a-z]将匹配不属于 a - z 的任一字符, 但可以匹配所有的大写字母
(2). 重复字符
重复字符含 义举 例{n}匹配前面的字符 n 次 x{2}匹配 xx, 但不匹配 x 或 xxx{n,}匹配前面的字符至少 n 次 x{2}匹配 2 个或更多的 x, 如 xxx,xxx..{n,m}匹配前面的字符至少 n 次, 至多 m 次。如果 n 为,此参数为可选参数 x{2,4}匹配 xx,xxx,xxxx, 但不匹配 xxxxx? 匹配前面的字符次或 1 次,实质上也是可选的 x? 匹配 x 或零个 x + 匹配前面的字符次或多次 x + 匹配 x 或 xx 或大于 0 的任意多个 x * 匹配前面的字符次或更多次 x * 匹配 0,1 或更多个 x
(3). 定位字符
定位字符描 述 ^ 随后的模式必须位于字符串的开始位置,如果是一个多行字符串,则必须位于行首。对于多行文本(包含回车符的一个字符串)来说,需要设置多行标志 $ 前面的模式必须位于字符串的未端,如果是一个多行字符串,必须位于行尾 \A 前面的模式必须位于字符串的开始位置,忽略多行标志 \z 前面的模式必须位于字符串的未端,忽略多行标志 \Z 前面的模式必须位于字符串的未端,或者位于一个换行符前 \b 匹配一个单词边界,也就是一个单词字符和非单词字符中间的点。要记住一个单词字符是 [a-zA-Z0-9] 中的一个字符。位于一个单词的词首 \B 匹配一个非单词字符边界位置,不是一个单词的词首
(4). 分组字符
分组字符定 义举 例()此字符可以组合括号内模式所匹配的字符,它是一个捕获组,也就是说模式匹配的字符作为最终设置了 ExplicitCapture 选项――默认状态下字符不是匹配的一部分输入字符串为:ABC1DEF2XY 匹配 3 个从 A 到 Z 的字符和 1 个数字的正则表达式:([A-Z]{3}\d)将产生两次匹配:Match 1=ABC1;Match 2=DEF2 每次匹配对应一个组:Match2 的第一个组=ABC;Match3 的第 1 个组=DEF 有了反向引用,就可以通过它在正则表达式中的编号以及 C# 和类 Group,GroupCollection 来访问组。如果设置了 ExplicitCapture 选项,就不能使用组所捕获的内容
(5). 字符簇:
[[:alpha:]] 任何字母。
[[:digit:]] 任何数字。
[[:alnum:]] 任何字母和数字。
[[:space:]] 任何白字符。
[[:upper:]] 任何大写字母。
[[:lower:]] 任何小写字母。
[[:punct:]] 任何标点符号。
[[:xdigit:]] 任何 16 进制的数字,相当于[0-9a-fA-F]。
(6). 优先级
转义符
(), (?:), (?=), [] 圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, anymetacharacter 位置和顺序
¦“或”操作
2. 常用函数
(1).regexp_like(expression, regexp)
返回值为一个布尔值。如果第一个参数匹配第二个参数所代表的正则表达式,那么将返回真,否则将返回假。
(2).regexp_instr(expression, regexp, startindex, times)
返回找到的匹配字符串的位置.
(3).regexp_substr(expression, regexp)
返回第一个字符串参数中,与第二个正则表达式参数相匹配的子字符串。
(4).regexp_replace(expression, regexp, replacement)
将 expression 中的按 regexp 匹配到的部分用 replacement 代替.
(5).REGEXP_COUNT (source_char, pattern [, position [, match_param]])
REGEXP_COUNT 返回 pattern 在 source_char 串中出现的次数。如果未找到匹配,则函数返回 0。position 变量告诉 Oracle 在源串的什么位置开始搜索。在开始位置之后每出现一次模式,都会使计数结果增加 1。
match_param 变量支持下面几个值:
‘i’用于不区分大小写的匹配
‘c’用于区分大小写的匹配
‘n’允许句点 (.) 作为通配符去匹配换行符。如果省略该参数,则句点将不匹配换行符
‘m’将源串视为多行。即 Oracle 将 ^ 和 $ 分别看作源串中任意位置任何行的开始和结束,而不是仅仅看作整个源串的开始或结束。如果省略该参数,则 Oracle 将源串看作一行。
‘x’忽略空格字符。默认情况下,空格字符与自身相匹配。
3. 示例:
(1). 查找 id 为 4 位数的记录
select data_object_id,object_name from HH where regexp_like(data_object_id, ^[[:digit:]]{3}$
select data_object_id,object_name from HH where regexp_like(data_object_id, ^\d{3}$
(2). 查找对象名包含英文和下划线的记录
select object_name from HH where regexp_like(object_name, ^[a-z|A-Z|_]*$ )
(3). 对象名以 a 或 A 开头的记录
select object_name from HH where regexp_like(object_name, ^[a|A] )
(4). 查找对象名为全英文,并且以 N 结尾
select object_name from HH where regexp_like(object_name, ^[a-z|A-Z]*N$ )
(5). 查找以非数字开头的员工信息
select object_name from HH where regexp_like(object_name, ^[^\d]
(6). 查找对象名中第一个特殊字符的位置
select object_name,regexp_instr(object_name, [^[:alnum:]] ,1) from HH;
(7). 从第三个字符开始,查找员工编号中第二个非数字字符的位置
select object_name,regexp_instr(object_name, [^[:alnum:]] ,3,2) from HH
(8). 返回从第二个字符开始检索,并且对象名以 L 开头 $ 结尾的子串
select object_name,regexp_substr(object_name, L.*\$$ ,2) from HH;
(9). 把对象名中所有非字母字符替换为“A”
select regexp_replace(object_name, [^a-z|A-Z] , A ) from HH;
(10). 查询字符串中 was 的出现次数,忽略大小写。
select regexp_count (THE PRO-NIECE WAS BORN TODAY, SO EXCITING! , Was , 1, i) from dual;
到此,关于“怎么掌握 oracle 正则表达式”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!