Oracle g數(shù)據(jù)庫內建了符合IEEE POSIX (Portable Operating System for Unix)標準的正則表達式 熟練使用正則表達式 可以寫出簡潔 強大的SQL語句
十年的衡南網(wǎng)站建設經(jīng)驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。成都全網(wǎng)營銷的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調整衡南建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“衡南網(wǎng)站設計”,“衡南網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。
正則表達式有幾個優(yōu)點優(yōu)于常見的LIKE操作符和INSTR SUBSTR及REPLACE 函數(shù)的 這些傳統(tǒng)的SQL 函數(shù)不便于進行模式匹配 只有LIKE 操作符通過使用%和_字符匹配 但LIKE不支持表達式的重復 復雜的更替 字符范圍 字符列表和POSIX 字符類等等
元字符(Meta Character)
Sql代碼
^??????????? 使表達式定位至一行的開頭
$??????????? 使表達式定位至一行的末尾
*??????????? 匹配 次或更多次
???????????? 匹配 次或 次
+??????????? 匹配 次或更多次
{m}????????? 正好匹配 m 次
{m }???????? 至少匹配 m 次
{m n}?????? 至少匹配 m 次但不超過 n 次
[:alpha:]??? 字母字符
[:lower:]??? 小寫字母字符
[:upper:]??? 大寫字母字符
[:digit:]??? 數(shù)字
[:alnum:]??? 字母數(shù)字字符
[:space:]??? 空白字符(禁止打?。?如回車符 換行符 豎直制表符和換頁符[:punct:]??? 標點字符
[:cntrl:]??? 控制字符(禁止打印)
[:print:]??? 可打印字符 | 分隔替換選項 通常與分組操作符 () 一起使用
( )????????? 將子表達式分組為一個替換單元 量詞單元或后向引用單元
[char]?????? 字符列表
Oracle g提供了四個regexp function: REGEXP_LIKE REGEXP_REPLACE REGEXP_INSTR REGEXP_SUBSTR
Sql代碼
REGEXP_LIKE 比較一個字符串是否與正則表達式匹配
(srcstr pattern [ match_option])
REGEXP_INSTR 在字符串中查找正則表達式 并且返回匹配的位置
(srcstr pattern [ position [ occurrence [ return_option [ match_option]]]])
REGEXP_SUBSTR 返回與正則表達式匹配的子字符串
(srcstr pattern [ position [ occurrence [ match_option]]])
REGEXP_REPLACE 搜索并且替換匹配的正則表達式
(srcstr pattern [ replacestr [ position [ occurrence [ match_option]]]])? 其中各參數(shù)的含義為:
Sql代碼
srcstr:??????? 被查找的字符數(shù)據(jù)
pattern:?????? 正則表達式
occurrence:??? 出現(xiàn)的次數(shù) 默認為
position:????? 開始位置
return_option: 默認值為 返回該模式的起始位置 值為 則返回符合匹配條件的下一個字符的起始位置
replacestr:??? 用來替換匹配模式的字符串
match_option:? 匹配方式選項 缺省為c
c case sensitive
I case insensitive
n ( )匹配任何字符(包括newline)
m 字符串存在換行的時候被作為多行處理
下面通過一些具體的例子來說明如何使用這四個函數(shù) 首先創(chuàng)建一個測試數(shù)據(jù)表
Sql代碼
SQL create table person (
first_name varchar( )
last_name varchar( )
email varchar( )
zip varchar( ));
Table created
SQL insert into person values ( Steven Chen );
row created
SQL insert into person values ( James Li || chr( ) || b d f );
row created
SQL mit;
Commit plete
SQL select * from person;
FIRST_NAME LAST_NAME? EMAIL??????????????? ZIP
Steven???? Chen?????? ???????
James????? Li???????? ????? b d f
REGEXP_LIKE
Sql代碼
SQL select zip as invalid_zip from person where regexp_like(zip [^[:digit:]] );
INVALID_ZIP
b d f
SQL select first_name from person where regexp_like(first_name ^S *n$ );
FIRST_NAME
Steven
SQL select first_name from person where regexp_like(first_name ^s *n$ );
no rows selected
SQL select first_name from person where regexp_like(first_name ^s *n$ c );
no rows selected
SQL select first_name from person where regexp_like(first_name ^s *n$ i );
FIRST_NAME
Steven
SQL select email from person where regexp_like(email ^james *$ );
no rows selected
SQL select email from person where regexp_like(email ^james *$ n );
SQL select email from person where regexp_like(email ^li *$ );
no rows selected
SQL select email from person where regexp_like(email ^li *$ m );
REGEXP_INSTR
Sql代碼
查找zip中第一個非數(shù)字字符的位置
SQL select regexp_instr(zip [^[:digit:]] ) as position from person;
POSITION
從第三個字符開始 查找zip中第二個非數(shù)字字符的位置
SQL select regexp_instr(zip [^[:digit:]] ) as position from person;
POSITION
從第三個字符開始 查找zip中第二個非數(shù)字字符的下一個字符位置
SQL select regexp_instr(zip [^[:digit:]] ) as position from person;
POSITION
REGEXP_SUBSTR
Sql代碼
SQL select regexp_substr(zip [^[:digit:]] ) as zip from person;
ZIP
b
SQL select regexp_substr(zip [^[:digit:]] ) as zip from person;
ZIP
f
REGEXP_REPLACE
Sql代碼
把zip中所有非數(shù)字字符替換為
SQL update person set zip=regexp_replace(zip [^[:digit:]] )
where regexp_like(zip [^[:digit:]] );
row updated
SQL select zip from person;
ZIP
后向引用(backreference)
后向引用是 一個很有用的特性 它能夠把子表達式的匹配部分保存在臨時緩沖區(qū)中 供以后重用 緩沖區(qū)從左至右進行編號 并利用 \digit 符號進行訪問 子表達式用一組圓括號來顯示 利用后向引用可以實現(xiàn)較復雜的替換功能
Sql代碼
SQL select regexp_replace( Steven Chen ( *) ( *) \ \ ) as reversed_name from dual;
REVERSED_NAME
Chen Steven
在DDL中也可以正則表達式 比如Constraint index view
Sql代碼
SQL alter table person add constraint constraint_zip check (regexp_like(zip ^[[:digit:]]+$ ));
lishixinzhi/Article/program/Oracle/201311/18745
oracle使用正則表達式列入兩個固定字符中間的數(shù)據(jù)方法:
1、正則表達式的使用需要用到關鍵字REGEXP,用定義一組字符,表示匹配125三個字符。
2、digit表示匹配任意數(shù)字,DOT表示ALL表示所有,連起來匹配包括換行符默認模式下.是不能匹配行符n的。
oracle的正則表達式(10g才可以用)
oracle的正則表達式(regular expression)簡單介紹
目前,正則表達式已經(jīng)在很多軟件中得到廣泛的應用,包括*nix(Linux, Unix等),HP等操作系統(tǒng),PHP,C#,Java等開發(fā)環(huán)境。
Oracle 10g正則表達式提高了SQL靈活性。有效的解決了數(shù)據(jù)有效性,重復詞的辨認, 無關的空白檢測,或者分解多個正則組成的字符串等問題。
Oracle 10g支持正則表達式的四個新函數(shù)分別是:REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR、和REGEXP_REPLACE。
它們使用POSIX 正則表達式代替了老的百分號(%)和通配符(_)字符。
特殊字符:
'^' 匹配輸入字符串的開始位置,在方括號表達式中使用,此時它表示不接受該字符集合。
'$' 匹配輸入字符串的結尾位置。如果設置了 RegExp 對象的 Multiline 屬性,則 $ 也匹配 '\n' 或'\r'。
'.' 匹配除換行符 \n之外的任何單字符。
'?' 匹配前面的子表達式零次或一次。
'*' 匹配前面的子表達式零次或多次。
'+' 匹配前面的子表達式一次或多次。
'( )' 標記一個子表達式的開始和結束位置。
'[]' 標記一個中括號表達式。
'{m,n}' 一個精確地出現(xiàn)次數(shù)范圍,m=出現(xiàn)次數(shù)=n,'{m}'表示出現(xiàn)m次,'{m,}'表示至少出現(xiàn)m次。
'|' 指明兩項之間的一個選擇。例子'^([a-z]+|[0-9]+)$'表示所有小寫字母或數(shù)字組合成的字符串。
\num 匹配 num,其中 num 是一個正整數(shù)。對所獲取的匹配的引用。
正則表達式的一個很有用的特點是可以保存子表達式以后使用,被稱為Backreferencing. 允許復雜的替換能力
如調整一個模式到新的位置或者指示被代替的字符或者單詞的位置. 被匹配的子表達式存儲在臨時緩沖區(qū)
中,緩沖區(qū)從左到右編號, 通過\數(shù)字符號訪問。 下面的例子列出了把名字 aa bb cc 變成cc, bb, aa.
Select REGEXP_REPLACE('aa bb cc','(.*) (.*) (.*)', '\3, \2, \1') FROM dual;
REGEXP_REPLACE('ELLENHILDISMIT
cc, bb, aa
'\' 轉義符。
字符簇:
[[:alpha:]] 任何字母。
[[:digit:]] 任何數(shù)字。
[[:alnum:]] 任何字母和數(shù)字。
[[:space:]] 任何白字符。
[[:upper:]] 任何大寫字母。
[[:lower:]] 任何小寫字母。
[[unct:]] 任何標點符號。
[[:xdigit:]] 任何16進制的數(shù)字,相當于[0-9a-fA-F]。
各種操作符的運算優(yōu)先級
\ 轉義符
(), (?, (?=), [] 圓括號和方括號
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, \anymetacharacter 位置和順序
| “或”操作
--測試數(shù)據(jù)
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_LIKE
select * from test where regexp_like(mc,'^a{1,3}');
select * from test where regexp_like(mc,'a{1,3}');
select * from test where regexp_like(mc,'^a.*e$');
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:]]');
Select mc FROM test Where REGEXP_LIKE(mc,'^[^[:digit:]]');
二、REGEXP_INSTR
Select 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_SUBSTR
SELECT REGEXP_SUBSTR(mc,'[a-z]+') FROM test;
SELECT REGEXP_SUBSTR(mc,'[0-9]+') FROM test;
SELECT REGEXP_SUBSTR('aababcde','^a.*b') FROM DUAL;
四、REGEXP_REPLACE
Select REGEXP_REPLACE('Joe Smith','( ){2,}', ',') AS RX_REPLACE FROM dual;
Select REGEXP_REPLACE('aa bb cc','(.*) (.*) (.*)', '\3, \2, \1') FROM dual;
regexp_like 2。regexp_substr 3。regexp_instr 4。regexp_replace 看函數(shù)名稱大概就能猜到有什么用了。 regexp_like 只能用于條件表達式,和 like 類似,但是使用的正則表達式進行匹配,語法很簡單: regexp_substr 函數(shù),和 substr 類似,用于拾取合符正則表達式描述的字符子串,語法如下: regexp_instr 函數(shù),和 instr 類似,用于標定符合正則表達式的字符子串的開始位置,語法如下: regexp_replace 函數(shù),和 replace 類似,用于替換符合正則表達式的字符串,語法如下: 這里解析一下幾個參數(shù)的含義: 1。source_char,輸入的字符串,可以是列名或者字符串常量、變量。 2。pattern,正則表達式。 3。match_parameter,匹配選項。 取值范圍: i:大小寫不敏感; c:大小寫敏感;n:點號 . 不匹配換行符號;m:多行模式;x:擴展模式,忽略正則表達式中的空白字符。 4。position,標識從第幾個字符開始正則表達式匹配。 5。occurrence,標識第幾個匹配組。 6。replace_string,替換的字符串。 說了一堆文縐縐的,現(xiàn)在開始實例演練了,在此之前先建好一個表。 01 create table tmp as 02 with data as ( 03 select 'like' as id ,'a9999' as str from dual union all 04 select 'like' ,'a9c' from dual union all 05 select 'like' ,'A7007' from dual union all 06 select 'like' ,'123a34cc' from dual union all
網(wǎng)站題目:oracle怎么寫正則 oracle 純數(shù)字的正則
標題鏈接:http://vcdvsql.cn/article34/hpgise.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供關鍵詞優(yōu)化、網(wǎng)站內鏈、電子商務、域名注冊、App設計、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)