...">
瀏覽量:133次
sql正則表達式是什么呢?不知道的小伙伴來看看陽泰小編今天的分享吧!
正則表達式中的元字符:
元字符 | 意思 | 例子 |
\ | 說明要匹配的字符是一個特殊字符、常量或者后者引用。(后引用重復上一次的匹配) | \n 匹配換行符 \\ 匹配 \ 匹配(匹配(?匹配 ) |
^ | 匹配字符串的開頭位置 | ^a匹配arwen.但不匹配barwen. |
$ | 匹配字符串的末尾位置 | en$匹配arwen.但不匹配arwenb. |
* | 匹配前面的字符0次或多次 | a*rwen可以匹配rwen或aaarwen. |
+ | 匹配前面的字符1次或多次 | a+rwen可以匹配arwen或aarwen.但不能匹配rwen. |
? | 匹配前面的字符0次或1次 | a?rwen可以匹配arwen或rwen.但不能匹配aarwen. |
{n} | 匹配前面的字符恰好是n次,其中n是整數(shù) | ar{2}wen可以匹配arrwen.但不能匹配arwen或arrrwen. |
{n,m} | 匹配前面的字符至少是n次,最多是m次.如果寫成 {n,}表示最少匹配n次.沒有上限. | ar{1,2}wen可以匹配arwen,arrwen.但不匹配awen或arrrwen. |
. | 點號,匹配除null,換行以外的任意單個字符 | arw.n.可以匹配arwen,arwin.但不能匹配arween或arwn. |
(pattern) | 括號中pattern是一個子正則表達式,匹配指定pattern模式的一個子表達式。 | 其實括號就像一般語言表達式中的括號.有時多加些括號可增強可讀性.另外的用處見下面關(guān)于\n的描述. |
x|y | 匹配“或” | x|y可以匹配x或者y |
[abc] | 可以匹配abc中的任何單個字符 | hello[abc]可以匹配helloa,hellob,helloc |
[a-z] | 可以匹配指定范圍內(nèi)的任何單個字符 | hell[a-z]可以匹配hello或者hellz |
[::] | 指定一個字符類,可以匹配該類中的任何字符 | [:alphanum:]可以匹配字符0-9、A-Z、a-z [:alpha:]可以匹配字符A-Z、a-z [:blank:]可以匹配空格或tab鍵 [:digit:]可以匹配數(shù)字0-9 [:graph:]可以匹配非空字符 [:lower:]可以匹配小寫字母a-z [:print:]與[:graph:]類似,不同之處在于[:print:]包括空格字符 [:punct:]可以匹配標點符號.,""等等 [:space:]可以匹配所有的空字符 [:upper:]可以匹配大寫字母A-Z [:xdigit:]可以匹配十六進制數(shù)字0-9、A-F、a-f |
\n | 這是對前一次匹配命中的一個后引用,其中n是一個正整數(shù) | arw(en)\1可以匹配arwenen.注意\1前面必須是個加括號的子表達式. |
1.regexp_like:
regexp_like(x,pattern[,match_option]),查看x是否與pattern相匹配,該函數(shù)還可以提供一個可選的參數(shù)match_option字符串說明默認的匹配選項。match_option的取值如下:
‘c’ 說明在進行匹配時區(qū)分大小寫(缺省值);
'i' 說明在進行匹配時不區(qū)分大小寫;
'n'(.)點號能表示所有單個字符,包括換行(俺還不知道什么地方有用到換行.只知道sql里面可以用chr(10)表示換行.
'm' 字符串存在換行的時候當作多行處理.這樣$就可匹配每行的結(jié)尾.不然的話$只匹配字符串最后的位置.
示例:select * from emp where regexp_like(ename,'^a[a-z]*n$');可以查找ename中以a開頭以n結(jié)尾的行.例如ename為arwen或arwin或anden.但Arwen不能被匹配.因為默認是區(qū)分大小寫.如果是select * from emp where regexp_like(ename,'^a[a-z]*n$','i')則可以查找ename為Arwen的行記錄.
2.regexp_instr:
REGEXP_INSTR(x,pattern[,start[,occurrence[,return_option[, match_option]]]])用于在x中查找pattern。返回pattern在x中出現(xiàn)的位置。匹配位置從1開始??梢詤⒖甲址瘮?shù) INSTR(),參數(shù)相關(guān):
'start' 開始查找的位置;
'occurrence' 說明應該返回第幾次出現(xiàn)pattern的位置;
'return_option' 說明應該返回什么整數(shù)。若該參數(shù)為0,則說明要返回的整數(shù)是x中的一個字符的位置;若該參數(shù)為非0的整數(shù),則說明要返回的整數(shù)為x中出現(xiàn)在pattern之后 的字符的位置;
'match_option' 修改默認的匹配設置.與regexp_like里面的相同.
示例:
DECLARE
V_RESULT?INTEGER?;
BEGIN
SELECT?REGEXP_INSTR('hello world','o',1,1,0)INTO?V_RESULT
FROM?DUAL;
DBMS_OUTPUT.PUT_LINE(V_RESULT);
END;
結(jié)果為5.即字母o第一個次出現(xiàn)的位置
如果regexp_instr('hello world','o',1,1,n)其中n為除0之外的整數(shù).比如1,3.則結(jié)果為6.表示第一次出現(xiàn)字母o的后面一個字符的位置.
如果regexp_instr('hello world','o',1,2,0)則結(jié)果為9.表示第二次出現(xiàn)字母o的位置.
3.regexp_replace:
REGEXP_REPLACE(x,pattern[,replace_string[,start[,occurrence[, match_option]]]])用于在x中查找pattern,并將其替換為replae_string。可以參考字符串函數(shù) REPLACE(),參數(shù)同REGEXP_INSTR函數(shù)
示例:
DECLARE
V_RESULT varchar2(90);
BEGIN
SELECT?REGEXP_REPLACE('hello world','o','x',1,1)INTO?V_RESULT
FROM?DUAL;
DBMS_OUTPUT.PUT_LINE(V_RESULT);
END;
結(jié)果為hellx world.
如果REGEXP_REPLACE('hello world','o','x'),則結(jié)果為hellx wxrld.
如果 REGEXP_REPLACE('hello world','o','x',1,2)則結(jié)果為hello wxrld.
4.regexp_substr:
REGEXP_SUBSTR(x,pattern[,start[,occurrence[, match_option]]])用于在x中查找pattern并返回??梢詤⒖甲址瘮?shù) SUBSTR(),參數(shù)同REGEXP_INSTR函數(shù).
例如:
DECLARE
V_RESULT VARCHAR2(255);
BEGIN
SELECT?REGEXP_SUBSTR('hello world','l{2}')INTO?V_RESULT
FROM?DUAL;
DBMS_OUTPUT.PUT_LINE(V_RESULT);
END?;
結(jié)果為ll
查詢到匹配的字符串才返回匹配的字符.沒查到就返回空.
[聲明]本網(wǎng)轉(zhuǎn)載網(wǎng)絡媒體稿件是為了傳播更多的信息,此類稿件不代表本網(wǎng)觀點,本網(wǎng)不承擔此類稿件侵權(quán)行為的連帶責任。故此,如果您發(fā)現(xiàn)本網(wǎng)站的內(nèi)容侵犯了您的版權(quán),請您的相關(guān)內(nèi)容發(fā)至此郵箱【779898168@qq.com】,我們在確認后,會立即刪除,保證您的版權(quán)。
官網(wǎng)優(yōu)化
整站優(yōu)化
渠道代理
400-655-5776