Oracle正则表达式怎么用

50次阅读
没有评论

共计 3993 个字符,预计需要花费 10 分钟才能阅读完成。

这篇文章给大家分享的是有关 Oracle 正则表达式怎么用的内容。丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,一起跟随丸趣 TV 小编过来看看吧。

oracle 正则表达式 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
–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:]]

正则表达式用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。

用户名:/^[a-z0-9_-]{3,16}$/

密码:/^[a-z0-9_-]{6,18}$/

十六进制值:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/

电子邮箱:/^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,6})$/

URL:/^(https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})([\\/\\w \\.-]*)*\\/?$/

IP 地址:/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
 
HTML 标签:/^ ([a-z]+)([^]+)*(?: (.*) \\ 1= |\\s+\\/ )$/

Unicode 编码中的汉字范围:/^[u4e00-u9fa5],{0,}$/

匹配中文字符的正则表达式:[\\u4e00-\\u9fa5]
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了

匹配双字节字符 (包括汉字在内):[^\\x00-\\xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计 2,ASCII 字符计 1)

匹配空白行的正则表达式:\\n\\s*\\r
评注:可以用来删除空白行

匹配 HTML 标记的正则表达式:(\\s*?)[^]* .*?| .*?
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力

匹配首尾空白字符的正则表达式:^\\s*|\\s*$
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式

匹配 Email 地址的正则表达式:\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*
评注:表单验证时很实用

匹配网址 URL 的正则表达式:[a-zA-z]+://[^\\s]*
评注:网上流传的版本功能很有限,上面这个基本可以满足需求

匹配帐号是否合法 (字母开头,允许 5 -16 字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
评注:表单验证时很实用

匹配国内电话号码:\\d{3}-\\d{8}|\\d{4}-\\d{7}
评注:匹配形式如 0511-4405222 或 021-87888822

匹配腾讯 QQ 号:[1-9][0-9]{4,}
评注:腾讯 QQ 号从 10000 开始

匹配中国大陆邮政编码:[1-9]\\d{5}(?!\\d)
评注:中国大陆邮政编码为 6 位数字

匹配×××:\\d{15}|\\d{18}
评注:中国大陆的×××为 15 位或 18 位

匹配 ip 地址:\\d+\\.\\d+\\.\\d+\\.\\d+
评注:提取 ip 地址时有用

匹配特定数字:
^[1-9]\\d*$ // 匹配正整数
^-[1-9]\\d*$ // 匹配负整数
^-?[1-9]\\d*$ // 匹配整数
^[1-9]\\d*|0$ // 匹配非负整数(正整数 + 0)
^-[1-9]\\d*|0$ // 匹配非正整数(负整数 + 0)
^[1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*$ // 匹配正浮点数
^-([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*)$ // 匹配负浮点数
^-?([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*|0?\\.0+|0)$ // 匹配浮点数
^[1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*|0?\\.0+|0$ // 匹配非负浮点数(正浮点数 + 0)
^(-([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*))|0?\\.0+|0$ // 匹配非正浮点数(负浮点数 + 0)
评注:处理大量数据时有用,具体应用时注意修正

匹配特定字符串:
^[A-Za-z]+$ // 匹配由 26 个英文字母组成的字符串
^[A-Z]+$ // 匹配由 26 个英文字母的大写组成的字符串
^[a-z]+$ // 匹配由 26 个英文字母的小写组成的字符串
^[A-Za-z0-9]+$ // 匹配由数字和 26 个英文字母组成的字符串
^\\w+$ // 匹配由数字、26 个英文字母或者下划线组成的字符串

感谢各位的阅读!关于“Oracle 正则表达式怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-24发表,共计3993字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)