oracle regexp like介紹和例子

2021-09-22 07:13:03 字數 3506 閱讀 4873

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次,''表示至少

出現m次。

\num 匹配 num,其中 num 是乙個正整數。對所獲取的匹配的引用。

字元簇: 

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

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

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

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

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

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

[[:punct:]] 任何標點符號。

[[:xdigit:]] 任何16進製制的數字,相當於[0-9a-fa-f]。

各種操作符的運算優先順序

\轉義符

(), (?:), (?=), 圓括號和方括號

*, +, ?, , , 限定符

^, $, 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]60');

-- 也可以這樣實現,使用字符集。

select * from fzq where regexp_like(value,'1[[:digit:]]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:]]');

例子:判斷姓名是否為空,少於兩個字元,包含數字和字母

create or replace

function checkname(namestr in varchar2) return integer

asbegin

--符合返回1,不符合返回0

if(namestr is null or length(namestr)<2) then

return 0;

else

if(namestr like '%未取名%') then

return 0;

end if;

if regexp_like(namestr,'^([a-z]+|[0-9]+|[a-z]+)$') then

return 0;

end if; 

return 1;      

end if;

end checkname;

oracle regexp like介紹和例子

oracle中的支援正規表示式的函式主要有下面四個 1,regexp like 與like的功能相似 2,regexp instr 與instr的功能相似 3,regexp substr 與substr的功能相似 4,regexp replace 與replace的功能相似 它們在用法上與oracl...

Oracle REGEXP LIKE介紹和例子

oracle中的支援正規表示式的函式主要有下面四個 1,regexp like 與like的功能相似 2,regexp instr 與instr的功能相似 3,regexp substr 與substr的功能相似 4,regexp replace 與replace的功能相似 它們在用法上與oracl...

oracle regexp like介紹和例子

oracle中的支援正規表示式的函式主要有下面四個 1,regexp like 與like的功能相似 2,regexp instr 與instr的功能相似 3,regexp substr 與substr的功能相似 4,regexp replace 與replace的功能相似 它們在用法上與oracl...