您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么掌握oracle正則表達式”,在日常操作中,相信很多人在怎么掌握oracle正則表達式問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么掌握oracle正則表達式”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
1. 正則表達式規范
(1).匹配字符
字符類 | 匹配的字符 | 舉 例 |
\d | 從0-9的任一數字 | \d\d匹配72,但不匹配aa或7a |
\D | 任一非數字字符 | \D\D\D匹配abc,但不匹配123 |
\w | 任一單詞字符,包括A-Z,a-z,0-9和下劃線 | \w\w\w\w匹配Ab-2,但不匹配∑£$%*或Ab_@ |
\W | 任一非單詞字符 | \W匹配@,但不匹配a |
\s | 任一空白字符,包括制表符,換行符,回車符,換頁符和垂直制表符 | 匹配在HTML,XML和其他標準定義中的所有傳統空白字符 |
\S | 任一非空白字符 | 空白字符以外的任意字符,如A%&g3;等 |
. | 任一字符 | 匹配除換行符以外的任意字符除非設置了MultiLine先項 |
[…] | 括號中的任一字符 | [abc]將匹配一個單字符,a,b或c. |
[a-z]將匹配從a到z的任一字符 | ||
[^…] | 不在括號中的任一字符 | [^abc]將匹配一個a、b、c之外的單字符,可以a,b或A、B、C |
[a-z]將匹配不屬于a-z的任一字符,但可以匹配所有的大寫字母 |
(2).重復字符
重復字符 | 含 義 | 舉 例 |
{n} | 匹配前面的字符n次 | x{2}匹配xx,但不匹配x或xxx |
{n,} | 匹配前面的字符至少n次 | x{2}匹配2個或更多的x,如xxx,xxx.. |
{n,m} | 匹配前面的字符至少n次,至多m次。如果n為,此參數為可選參數 | x{2,4}匹配xx,xxx,xxxx,但不匹配xxxxx |
? | 匹配前面的字符次或1次,實質上也是可選的 | x?匹配x或零個x |
+ | 匹配前面的字符次或多次 | x+匹配x或xx或大于0的任意多個x |
* | 匹配前面的字符次或更多次 | x*匹配0,1或更多個x |
(3).定位字符
定位字符 | 描 述 |
^ | 隨后的模式必須位于字符串的開始位置,如果是一個多行字符串,則必須位于行首。對于多行文本(包含回車符的一個字符串)來說,需要設置多行標志 |
$ | 前面的模式必須位于字符串的未端,如果是一個多行字符串,必須位于行尾 |
\A | 前面的模式必須位于字符串的開始位置,忽略多行標志 |
\z | 前面的模式必須位于字符串的未端,忽略多行標志 |
\Z | 前面的模式必須位于字符串的未端,或者位于一個換行符前 |
\b | 匹配一個單詞邊界,也就是一個單詞字符和非單詞字符中間的點。要記住一個單詞字符是[a-zA-Z0-9]中的一個字符。位于一個單詞的詞首 |
\B | 匹配一個非單詞字符邊界位置,不是一個單詞的詞首 |
(4).分組字符
分組字符 | 定 義 | 舉 例 |
() | 此字符可以組合括號內模式所匹配的字符,它是一個捕獲組,也就是說模式匹配的字符作為最終設置了ExplicitCapture選項――默認狀態下字符不是匹配的一部分 | 輸入字符串為:ABC1DEF2XY |
匹配3個從A到Z的字符和1個數字的正則表達式:([A-Z]{3}\d) | ||
將產生兩次匹配:Match 1=ABC1;Match 2=DEF2 | ||
每次匹配對應一個組:Match2的第一個組=ABC;Match3的第1個組=DEF | ||
有了反向引用,就可以通過它在正則表達式中的編號以及C#和類Group,GroupCollection來訪問組。如果設置了ExplicitCapture選項,就不能使用組所捕獲的內容 |
(5).字符簇:
[[:alpha:]] 任何字母。
[[:digit:]] 任何數字。
[[:alnum:]] 任何字母和數字。
[[:space:]] 任何白字符。
[[:upper:]] 任何大寫字母。
[[:lower:]] 任何小寫字母。
[[:punct:]] 任何標點符號。
[[:xdigit:]] 任何16進制的數字,相當于[0-9a-fA-F]。
(6).優先級
轉義符
(), (?:), (?=), [] 圓括號和方括號
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, anymetacharacter 位置和順序
| “或”操作
2.常用函數
(1).regexp_like(expression, regexp)
返回值為一個布爾值。如果第一個參數匹配第二個參數所代表的正則表達式,那么將返回真,否則將返回假。
(2).regexp_instr(expression, regexp, startindex, times)
返回找到的匹配字符串的位置.
(3).regexp_substr(expression, regexp)
返回第一個字符串參數中,與第二個正則表達式參數相匹配的子字符串。
(4).regexp_replace(expression, regexp, replacement)
將expression中的按regexp匹配到的部分用replacement代替.
(5).REGEXP_COUNT (source_char, pattern [, position [, match_param]])
REGEXP_COUNT 返回pattern 在source_char 串中出現的次數。如果未找到匹配,則函數返回0。position 變量告訴Oracle 在源串的什么位置開始搜索。在開始位置之后每出現一次模式,都會使計數結果增加1。
match_param 變量支持下面幾個值:
‘i’ 用于不區分大小寫的匹配
‘c’ 用于區分大小寫的匹配
‘n’ 允許句點(.)作為通配符去匹配換行符。如果省略該參數,則句點將不匹配換行符
‘m’ 將源串視為多行。即Oracle 將^和$分別看作源串中任意位置任何行的開始和結束,而不是僅僅看作整個源串的開始或結束。如果省略該參數,則Oracle將源串看作一行。
‘x’ 忽略空格字符。默認情況下,空格字符與自身相匹配。
3.示例:
(1).查找id為4位數的記錄
select data_object_id,object_name from HH where regexp_like(data_object_id,'^[[:digit:]]{3}$');
select data_object_id,object_name from HH where regexp_like(data_object_id,'^\d{3}$');
(2).查找對象名包含英文和下劃線的記錄
select object_name from HH where regexp_like(object_name,'^[a-z|A-Z|_]*$')
(3).對象名以a或A開頭的記錄
select object_name from HH where regexp_like(object_name,'^[a|A]')
(4).查找對象名為全英文,并且以N結尾
select object_name from HH where regexp_like(object_name,'^[a-z|A-Z]*N$')
(5).查找以非數字開頭的員工信息
select object_name from HH where regexp_like(object_name,'^[^\d]');
(6).查找對象名中第一個特殊字符的位置
select object_name,regexp_instr(object_name,'[^[:alnum:]]',1) from HH;
(7).從第三個字符開始,查找員工編號中第二個非數字字符的位置
select object_name,regexp_instr(object_name,'[^[:alnum:]]',3,2) from HH
(8).返回從第二個字符開始檢索,并且對象名以L開頭$結尾的子串
select object_name,regexp_substr(object_name,'L.*\$$',2) from HH;
(9).把對象名中所有非字母字符替換為“A”
select regexp_replace(object_name,'[^a-z|A-Z]','A') from HH;
(10).查詢字符串中was的出現次數,忽略大小寫。
select regexp_count ('THE PRO-NIECE WAS BORN TODAY, SO EXCITING!', 'Was', 1,'i') from dual;
到此,關于“怎么掌握oracle正則表達式”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。