zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

oracle正则表达式regexp_like的用法详解

Oracle正则表达式 详解 用法 like REGEXP
2023-06-13 09:15:01 时间

/*
ORACLE中的支持正则表达式的函数主要有下面四个:
1,REGEXP_LIKE:与LIKE的功能相似
2,REGEXP_INSTR:与INSTR的功能相似
3,REGEXP_SUBSTR:与SUBSTR的功能相似
4,REGEXP_REPLACE:与REPLACE的功能相似
它们在用法上与OracleSQL函数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位置和顺序

*/
--创建表
createtablefzq
(
 idvarchar(4),
 valuevarchar(10)
);
--数据插入
insertintofzqvalues
("1","1234560");
insertintofzqvalues
("2","1234560");
insertintofzqvalues
("3","1b3b560");
insertintofzqvalues
("4","abc");
insertintofzqvalues
("5","abcde");
insertintofzqvalues
("6","ADREasx");
insertintofzqvalues
("7","123 45");
insertintofzqvalues
("8","adc de");
insertintofzqvalues
("9","adc,.de");
insertintofzqvalues
("10","1B");
insertintofzqvalues
("10","abcbvbnb");
insertintofzqvalues
("11","11114560");
insertintofzqvalues
("11","11124560");
--regexp_like
--查询value中以1开头60结束的记录并且长度是7位
select*fromfzqwherevaluelike"1____60";
select*fromfzqwhereregexp_like(value,"1....60");
--查询value中以1开头60结束的记录并且长度是7位并且全部是数字的记录。
--使用like就不是很好实现了。
select*fromfzqwhereregexp_like(value,"1[0-9]{4}60");
--也可以这样实现,使用字符集。
select*fromfzqwhereregexp_like(value,"1[[:digit:]]{4}60");
--查询value中不是纯数字的记录
select*fromfzqwherenotregexp_like(value,"^[[:digit:]]+$");
--查询value中不包含任何数字的记录。
select*fromfzqwhereregexp_like(value,"^[^[:digit:]]+$");
--查询以12或者1b开头的记录.不区分大小写。
select*fromfzqwhereregexp_like(value,"^1[2b]","i");
--查询以12或者1b开头的记录.区分大小写。
select*fromfzqwhereregexp_like(value,"^1[2B]");
--查询数据中包含空白的记录。
select*fromfzqwhereregexp_like(value,"[[:space:]]");
--查询所有包含小写字母或者数字的记录。
select*fromfzqwhereregexp_like(value,"^([a-z]+|[0-9]+)$");
--查询任何包含标点符号的记录。
select*fromfzqwhereregexp_like(value,"[[:punct:]]");
/*
理解它的语法就可以了。其它的函数用法类似。
*/