Oracle中RegExp_Like正則表達式基本用法舉例
--基本用法,是否包含某字符串 =like %36% select * from k_micfo where regexp_like(loginid,'36'); if regexp_like(str,'^[0-9\.]+$') --只包含數(shù)字0-9,,小數(shù)點. --oracle判斷字段是否是純數(shù)字 (四種寫法結(jié)果一樣) select * from k_micfo where regexp_like(loginid,'^[0-9]+[0-9]$'); select * from k_micfo where regexp_like(loginid,'^[0-9]+$'); --'+' 匹配前面的子表達式一次或多次。 select * from k_micfo where regexp_like(loginid,'^[[:digit:]]+$'); select * from k_micfo where not regexp_like(loginid,'[^0-9]'); --^表示排除 --不是0-9純數(shù)字 (二種寫法結(jié)果一樣) select * from k_micfo where regexp_like(loginid,'[^0-9]'); --^表示排除 select * from k_micfo where not regexp_like(loginid,'^[[:digit:]]+$'); --判斷字段中是否只包含0-9,-字符(二種寫法結(jié)果一樣) select * from k_micfo where regexp_like(APPLICATION,'^[0-9]|[-]$'); --'|' 指明兩項之間的一個選擇。相當(dāng)于or 例子'^([a-z]+|[0-9]+)$'表示所有小寫字母或數(shù)字組合成的字符串。 select * from k_micfo where regexp_like(APPLICATION,'[0-9-]'); --判斷字段中是否只包含0-9,-字符, 或者空格 (五種寫法結(jié)果一樣) select * from k_micfo where regexp_like(APPLICATION,'^[0-9]|[-]$') or regexp_like(APPLICATION,'^[ ]$'); select * from k_micfo where regexp_like(APPLICATION,'^[0-9]|[-]$|^[ ]$'); select * from k_micfo where regexp_like(APPLICATION,'(^[0-9]|[-]$)|(^[ ]$)'); --'( )' 標記一個子表達式的開始和結(jié)束位置 select * from k_micfo where regexp_like(APPLICATION,'^[0-9]|[-]|[ ]$'); select * from k_micfo where regexp_like(APPLICATION,'[0-9- ]');
經(jīng)測試oracle中的RegExp_Like跟標準正則表達式用法基本一致,”|“ 就是or的意思
ORACLE中的支持正則表達式的函數(shù)主要有下面四個:
- 1,REGEXP_LIKE :與LIKE的功能相似
- 2,REGEXP_INSTR :與INSTR的功能相似
- 3,REGEXP_SUBSTR :與SUBSTR的功能相似
- 4,REGEXP_REPLACE :與REPLACE的功能相似
它們在用法上與Oracle SQL 函數(shù)LIKE、INSTR、SUBSTR 和REPLACE 用法相同,
但是它們使用POSIX 正則表達式代替了老的百分號(%)和通配符(_)字符。
POSIX 正則表達式由標準的元字符(metacharacters)所構(gòu)成:
- '^' 匹配輸入字符串的開始位置,在方括號表達式中使用,此時它表示不接受該字符集合。
- '$' 匹配輸入字符串的結(jié)尾位置。如果設(shè)置了 RegExp 對象的 Multiline 屬性,則 $ 也匹
- 配 '\n' 或 '\r'。
- '.' 匹配除換行符之外的任何單字符。
- '?' 匹配前面的子表達式零次或一次。
- '+' 匹配前面的子表達式一次或多次。
- '*' 匹配前面的子表達式零次或多次。
- '|' 指明兩項之間的一個選擇。例子'^([a-z]+|[0-9]+)$'表示所有小寫字母或數(shù)字組合成的
- 字符串。
- '( )' 標記一個子表達式的開始和結(jié)束位置。
- '[]' 標記一個中括號表達式。
- '{m,n}' 一個精確地出現(xiàn)次數(shù)范圍,m=<出現(xiàn)次數(shù)<=n,'{m}'表示出現(xiàn)m次,'{m,}'表示至少出現(xiàn)m次。
- \num 匹配 num,其中 num 是一個正整數(shù)。對所獲取的匹配的引用。
字符簇:
- [[:alpha:]] 任何字母。
- [[:digit:]] 任何數(shù)字。
- [[:alnum:]] 任何字母和數(shù)字。
- [[:space:]] 任何白字符。
- [[:upper:]] 任何大寫字母。
- [[:lower:]] 任何小寫字母。
- [[:punct:]] 任何標點符號。
- [[:xdigit:]] 任何16進制的數(shù)字,相當(dāng)于[0-9a-fA-F]。
各種操作符的運算優(yōu)先級
\轉(zhuǎn)義符
(), (?:), (?=), [] 圓括號和方括號
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, anymetacharacter 位置和順序
--創(chuàng)建表 create table fzq ( id varchar(4), value varchar(10) ); --數(shù)據(jù)插入 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結(jié)束的記錄并且長度是7位 select * from fzq where value like '1____60'; select * from fzq where regexp_like(value,'1....60'); --查詢value中以1開頭60結(jié)束的記錄并且長度是7位并且全部是數(shù)字的記錄。 --使用like就不是很好實現(xiàn)了。 select * from fzq where regexp_like(value,'1[0-9]{4}60'); -- 也可以這樣實現(xiàn),使用字符集。 select * from fzq where regexp_like(value,'1[[:digit:]]{4}60'); -- 查詢value中不是純數(shù)字的記錄 select * from fzq where not regexp_like(value,'^[[:digit:]]+$'); -- 查詢value中不包含任何數(shù)字的記錄。 select * from fzq where regexp_like(value,'^[^[:digit:]]+$'); --查詢以12或者1b開頭的記錄.不區(qū)分大小寫。 select * from fzq where regexp_like(value,'^1[2b]','i'); --查詢以12或者1b開頭的記錄.區(qū)分大小寫。 select * from fzq where regexp_like(value,'^1[2B]'); -- 查詢數(shù)據(jù)中包含空白的記錄。 select * from fzq where regexp_like(value,'[[:space:]]'); --查詢所有包含小寫字母或者數(shù)字的記錄。 select * from fzq where regexp_like(value,'^([a-z]+|[0-9]+)$'); --查詢?nèi)魏伟瑯它c符號的記錄。 select * from fzq where regexp_like(value,'[[:punct:]]');
正則表達式用于字符串處理、表單驗證等場合,實用高效?,F(xiàn)將一些常用的表達式收集于此,以備不時之需。
用戶名:/^[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]
評注:匹配中文還真是個頭疼的事,有了這個表達式就好辦了
匹配雙字節(jié)字符(包括漢字在內(nèi)):[^\x00-\xff]
評注:可以用來計算字符串的長度(一個雙字節(jié)字符長度計2,ASCII字符計1)
匹配空白行的正則表達式:\n\s*\r
評注:可以用來刪除空白行
匹配HTML標記的正則表達式:<(\S*?)[^>]*>.*?|<.*? />
評注:網(wǎng)上流傳的版本太糟糕,上面這個也僅僅能匹配部分,對于復(fù)雜的嵌套標記依舊無能為力
匹配首尾空白字符的正則表達式:^\s*|\s*$
評注:可以用來刪除行首行尾的空白字符(包括空格、制表符、換頁符等等),非常有用的表達式
匹配Email地址的正則表達式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
評注:表單驗證時很實用
匹配網(wǎng)址URL的正則表達式:[a-zA-z]+://[^\s]*
評注:網(wǎng)上流傳的版本功能很有限,上面這個基本可以滿足需求
匹配帳號是否合法(字母開頭,允許5-16字節(jié),允許字母數(shù)字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
評注:表單驗證時很實用
匹配國內(nèi)電話號碼:\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位數(shù)字
匹配身份證:\d{15}|\d{18}
評注:中國大陸的身份證為15位或18位
匹配ip地址:\d+\.\d+\.\d+\.\d+
評注:提取ip地址時有用
匹配特定數(shù)字:
- ^[1-9]\d*$ //匹配正整數(shù)
- ^-[1-9]\d*$ //匹配負整數(shù)
- ^-?[1-9]\d*$ //匹配整數(shù)
- ^[1-9]\d*|0$ //匹配非負整數(shù)(正整數(shù) + 0)
- ^-[1-9]\d*|0$ //匹配非正整數(shù)(負整數(shù) + 0)
- ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮點數(shù)
- ^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配負浮點數(shù)
- ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ //匹配浮點數(shù)
- ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ //匹配非負浮點數(shù)(正浮點數(shù) + 0)
- ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匹配非正浮點數(shù)(負浮點數(shù) + 0)
評注:處理大量數(shù)據(jù)時有用,具體應(yīng)用時注意修正
匹配特定字符串:
- ^[A-Za-z]+$ //匹配由26個英文字母組成的字符串
- ^[A-Z]+$ //匹配由26個英文字母的大寫組成的字符串
- ^[a-z]+$ //匹配由26個英文字母的小寫組成的字符串
- ^[A-Za-z0-9]+$ //匹配由數(shù)字和26個英文字母組成的字符串
- ^\w+$ //匹配由數(shù)字、26個英文字母或者下劃線組成的字符串
去除精度緯度中非浮點數(shù)
select jd,wd from xx_xa_xsczaqpc t where t.id not in ( select id from xx_xa_xsczaqpc where regexp_like(jd,'^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$')) ;
是雙小數(shù)點的數(shù)
select xx_jbxx_id,jd,wd from xx_xa_xsczaqpc t where regexp_like(jd,'^[1-9]\d*\.\d*\.\d*[1-9]\d*$')
總結(jié)
到此這篇關(guān)于Oracle中RegExp_Like正則表達式基本用法舉例的文章就介紹到這了,更多相關(guān)Oracle RegExp_Like正則表達式用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
兩種oracle創(chuàng)建字段自增長的實現(xiàn)方式
這篇文章介紹了兩種oracle創(chuàng)建字段自增長的實現(xiàn)方式,一是序列+觸發(fā)器,二是序列+顯示調(diào)用序列,需要的朋友可以參考下2015-07-07Oracle 12CR2查詢轉(zhuǎn)換教程之臨時表轉(zhuǎn)換詳解
這篇文章主要給大家介紹了關(guān)于Oracle 12CR2查詢轉(zhuǎn)換教程之臨時表轉(zhuǎn)換的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11Oracle執(zhí)行計劃及性能調(diào)優(yōu)詳解使用方法
在Oracle數(shù)據(jù)庫中,通過使用EXPLAIN PLAN、AWR、SQL Trace等工具可以對SQL性能進行詳細分析,EXPLAIN PLAN可以展示SQL執(zhí)行計劃和關(guān)鍵性能指標如操作類型、成本、行數(shù)等,本文給大家介紹Oracle執(zhí)行計劃及性能調(diào)優(yōu)詳解使用方法,感興趣的朋友跟隨小編一起看看吧2024-09-09oracle與gbase8s遷移數(shù)據(jù)類型對照以及舉例說明
gbase8s是一個高性能的分布式關(guān)系型數(shù)據(jù)庫,下面這篇文章主要給大家介紹了關(guān)于oracle與gbase8s遷移數(shù)據(jù)類型對照以及舉例說明的相關(guān)資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2023-12-12oracle導(dǎo)入導(dǎo)出某個schema數(shù)據(jù)的步驟
這篇文章主要介紹了oracle導(dǎo)入導(dǎo)出某個schema數(shù)據(jù)的步驟,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-09-09Oracle數(shù)據(jù)泵(Data Dump)使用過程當(dāng)中經(jīng)常會遇到一些奇奇怪怪的錯誤案例
從oracledatabase 10g開始引入了data pump(數(shù)據(jù)泵)工具,它提供了一種基于服務(wù)器的數(shù)據(jù)導(dǎo)出導(dǎo)入使用程序。 所有的data pump都作為一個服務(wù)器進程,數(shù)據(jù)不再必須由一個客戶程序處理。Data Pump工具的導(dǎo)出和導(dǎo)入實現(xiàn)Oracle數(shù)據(jù)庫之間數(shù)據(jù)的傳輸。2014-09-09