一.????正則表達式簡介:
????正則表達式,就是以某種模式來匹配一類字符串。一旦概括了某類字符串,那么正則表達式即可用于針對字符串的各種相關操作。例如,判斷匹配性,進行字符串的重新組合等。正則表達式提供了字符串處理的快捷方式。Oracle?10g及以后的版本中也支持正則表達式.
二.????正則表達式相對通配符的優勢:
1.???????正則表達式中不僅存在著代表模糊字符的特殊字符,而且存在著量詞等修飾字符,使得模式的控制更加靈活和強大。
2.???????通配符的使用一般是在特定的環境下,不同的環境下,通配符有可能不同。而正則表達式,不但廣泛應用于各種編程語言,而且在各種編程語言中,保持了語法的高度一致性。?
三.????元字符:
元字符是指在正則表達式中表示特殊含義的字符。
?
ORACLE正則表達式 | |
元字符 | 含義 |
^ | 匹配輸入字符串的開始位置,在方括號表達式中使用,此時它表示不接受該字符集合。 |
$ | 匹配輸入字符串的結尾位置。如果設置了?RegExp?對象的?Multiline?屬性,則?$?也匹配?'n'?或?'r'。 |
. | 匹配除換行符?n之外的任何單字符。 |
? | 匹配前面的子表達式零次或一次。 |
+ | 匹配前面的子表達式一次或多次。 |
* | 匹配前面的子表達式零次或多次。 |
| | 指明兩項之間的一個選擇。例子'^([a-z]+|[0-9]+)$'表示所有小寫字母或數字組合成的字符串。 |
() | 標記一個子表達式的開始和結束位置(字符組)。 |
[] | 標記一個中括號表達式。 |
{m,n} | 一個精確地出現次數范圍,m=<出現次數<=n,'{m}'表示出現m次,'{m,}'表示至少出現m次。 |
四.????量詞
???量詞用來指定量詞的前一個字符出現的次數。量詞的形式主要有“?”、“*”、“+”、“{}”。量詞在用于匹配字符串時,默認遵循貪婪原則。貪婪原則是指,盡可能多地匹配字符。例如:字符串“Function(p),(OK)”,如果使用正則表達式“.?”進行匹配,則得到字符串“(p),(OK)”?,而非“(p)”;若欲得到“(p)”,則必須取消量詞的貪婪原則,此時只需要為量詞后追加另外一個數量詞“?”即可。如上面的正則表達式應該改為“.??”。
五.????字符轉義:
????元字符在正則表達式中有特殊含義。如果需要使用其原義,則需要用到字符轉義。字符轉義使用字符“\”來實現。其語法模式為:“\”+元字符。例如,“\.”表示普通字符“.”;?????“\.doc”匹配字符串“.doc”;而普通字符“\”需要使用“\\”來表示。
六.????字符組.
字符組是指將模式中的某些部分作為一個整體。這樣,量詞可以來修飾字符組,從而提高正則表達式的靈活性。字符組通過()來實現.
許多編程語言中,可以利用“$1”、“$2”等來獲取第一個、第二個字符組,即所謂的后向引用。在Oracle中,引用格式為“\1”、“\2”。
七.????正則表達式分支
????可以利用“|”來創建多個正則表達式分支。例如,“\d{4}|\w{4}”可以看做兩個正則表達式——“\d{4}”和“\w{4}”,匹配其中任何一個正則表達式的字符串都被認為匹配整個正則表達式。如果該字符串兩個正則表達式分支都匹配,那么將被處理為匹配第一個正則表達式分支。
八.????字符類.
在Oracle中,正則表達式的用法與標準用法略有不同。這種不同主要體現在對于字符類的定義上。Orale中不使用字符“\”與普通字符組合的形式來實現字符類,而是具有其特殊語法.?
九.????ORACLE中的四個正則表達式相關函數.
1.???????regexp_like(expression,?regexp)
???返回值為一個布爾值。如果第一個參數匹配第二個參數所代表的正則表達式,那么將返回真,否則將返回假。
?舉例:???select?*?from?people?where?regexp_like(name,?'^J.*$');?
相當于:??select?*?from?people?where?name?like?'J%';?
2.???????regexp_instr(expression,?regexp,?startindex,?times)
返回找到的匹配字符串的位置.
參數startindex表示開始進行匹配比較的位置;參數times表示第幾次匹配作為最終匹配結果。
舉例:?select?regexp_instr('12.158',?'\.')?position?from?dual;?
regexp_instr('12.158',?'\.')用于獲取第一個小數點的位置。
3.???????regexp_substr(expression,?regexp)
???返回第一個字符串參數中,與第二個正則表達式參數相匹配的子字符串。
???舉例:?create?table?html(id?integer,?html?varchar2(2000));?
insert?into?html?
values?(1,?'<a?href="http://mail.google.com/2009/1009.html">mail?link</a>');?
表html中存儲了HTML標簽及內容。現欲從標簽<a>中獲得鏈接的url,那么可以利用regexp_substr()函數。
select?id,?regexp_substr(html,?'http[a-zA-Z0-9\.:/]*')?url?from?html;?
?4.??regexp_replace(expression,?regexp,?replacement)
?????將expression中的按regexp匹配到的部分用replacement代替.
?????在參數replacement中,可以含有后向引用,以便將正則表達式中的字符組重新捕獲。例如,某些國家和地區的日期格式可能為“MM/DD/YYYY”,那么可以利用regexp_replace()函數來轉換日期格式。
select?regexp_replace('09/29/2008',?'^([0-9]{2})/([0-9]{2})/([0-9]{4})$',?'\3-\1-\2')??replace?
from?dual;?
?
注:?在進行正則表達式匹配時,還可以忽略字符大小寫形式進行匹配.但是不能解除[[:upper:]]和[[:lower:]]的作用.
select?*?from?people?where?regexp_like(name,?'or');?
select?*?from?people?where?regexp_like(name,?'or',?'i');???--‘i’表示忽略大小寫
十.?正則表達式練習?
第一:?REGEXP_LIKE函數用法
EMP表結構如下:
SQL>?desc?emp;
?Name??????????????????????????????????????Null?????Type
?-----------------------------------------?--------?----------------------------
?
?EMPNO?????????????????????????????????????NOT?NULL?NUMBER(4)
?ENAME??????????????????????????????????????????????VARCHAR2(10)
?JOB????????????????????????????????????????????????VARCHAR2(9)
?MGR????????????????????????????????????????????????NUMBER(4)
?HIREDATE???????????????????????????????????????????DATE
?SAL????????????????????????????????????????????????NUMBER(7,2)
?COMM???????????????????????????????????????????????NUMBER(7,2)
?DEPTNO?????????????????????????????????????????????NUMBER(2)
EMP表中部分數據如下:
SQL>?select?empno,ename,sal,hiredate?from?emp;
?
?????EMPNO?ENAME?????????????SAL?HIREDATE
----------?----------?----------?--------------
??????7369?SMITH?????????????800?17-12月-80
??????7499?ALLEN????????????1600?20-2月?-81
??????7521?WARD?????????????1250?22-2月?-81
??????7566?JONES????????????2975?02-4月?-81?
?
下面給出幾種REGEXP_LIKE函數的例子
1、查找員工編號為4位數字的員工信息
SQL>?select?empno,ename?from?emp?where?regexp_like(empno,'^[[:digit:]]{4}$');
?或者:?select?empno,ename?from?emp?where?regexp_like(empno,'^[0-9]$');
?????EMPNO?ENAME
----------?----------
??????7369?SMITH
??????7499?ALLEN
??????7521?WARD
??????7566?JONES
2、查找員工姓名為全英文的員工信息
SQL>??select?empno,ename?from?emp?where?regexp_like(ename,'^[[:alpha:]]+$');
?或者:??select?*?from?emp?where?regexp_like(ename,'^[a-zA-Z]+$');
?????EMPNO?ENAME
----------?----------
??????7369?SMITH
??????7499?ALLEN
??????7521?WARD
??????7566?JONES
??????7654?MARTIN
3、查找員工姓名以“a”字母開頭,不區分大小寫
SQL>?select?empno,ename?from?emp?where?regexp_like(ename,'^a','i');
?
?????EMPNO?ENAME
----------?----------
??????7499?ALLEN
??????7876?ADAMS
4、查找員工姓名為全英文,且以“N”結尾的員工信息
SQL>?select?empno,ename?from?emp?where?regexp_like(ename,'^[[:alpha:]]+N$');
?
?????EMPNO?ENAME
----------?----------
??????7499?ALLEN
??????7654?MARTIN
5、查找員工編號以非數字開頭的員工信息
SQL>?select?empno,ename?from?emp?where?regexp_like(empno,'[^[:digit:]]');
?
no?rows?selected?
?
第二:?REGEXP_INSTR函數用法
1、查找員工編號中第一個非數字字符的位置
SQL>?select?regexp_instr(empno,'[^[:digit:]]')?position?from?emp;
?
?POSITION
----------
?????????0
?????????0
?????????0
2、從第三個字符開始,查找員工編號中第二個非數字字符的位置
SQL>?select?regexp_instr(empno,'[^[:digit:]]',3,2)?position?from?emp;
?
?POSITION
----------
?????????0
?????????0?
?
?
第三:?REGEXP_SUBSTR函數用法
1、返回從ename的第二個位置開始查找,并且是以“L”開頭到結尾的字串
SQL>?select?regexp_substr(ename,'L.*','2')?substr?from?emp;
?
SUBSTR
------------------
LLEN
LAKE
LARK?
?
?
第四:REGEXP_REPLACE函數用法
1、把ename中所有非字母字符替換為“A”
SQL>?update?emp?set?ename=regexp_replace(ename,?'[^[:alpha:]]',?'A')
2?where?regexp_like(ename,?'[^[:alpha:]]');
?
1?row?updated?
?
轉載來源:http://wenku.baidu.com/view/4d7fc0d126fff705cc170a58.html
?
________________________________________________________________________________________________________________
Oracle 正則表達式? 就是由普通字符(例如字符a到z)以及特殊字符(稱為元字符)組成的文字模式。該模式描述在查找文字主體時待匹配的一個或多個字符串。正則表達式作為一個模板,將某個字符模式與所搜索的字符串進行匹配。? 本文詳細地列出了能在正則表達式中使用,以匹配文本的各種字符。當你需要解釋一個現有的正則表達式時,可以作為一個快捷的參考。更多詳細內容,請參考:Francois Liger,Craig McQueen,Pal Wilton[劉樂亭譯] C#字符串和正則表達式參考手冊北京:清華大學出版社2003.2? 一. ? ? 匹配字符? 字符類 匹配的字符 ?舉 例? \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的任一字符,但可以匹配所有的大寫字母?
二. ? ? 重復字符? 重復字符 含 義 ?舉 例? {n} 匹配前面的字符n次 ?x{2}匹配xx,但不匹配x或xxx? {n,} 匹配前面的字符至少n次x{2}匹配2個或更多的x,如xxx,xxx..? {n,m} 匹配前面的字符至少n次,至多m次。如果n為0,此參數為可選參數x{2,4}匹配xx,xxx,xxxx,但不匹配xxxxx? ? 匹配前面的字符0次或1次,實質上也是可選的x?匹配x或零個x? + 匹配前面的字符0次或多次x+匹配x或xx或大于0的任意多個x? * 匹配前面的字符0次或更多次x*匹配0,1或更多個x?
三. ? ? 定位字符? 定位字符 描 述? ^ 隨后的模式必須位于字符串的開始位置,如果是一個多行字符串,則必須位于行首。對于多行文本(包含回車符的一個字符串)來說,需要設置多行標志? $ 前面的模式必須位于字符串的未端,如果是一個多行字符串,必須位于行尾? \A 前面的模式必須位于字符串的開始位置,忽略多行標志? \z 前面的模式必須位于字符串的未端,忽略多行標志? \Z 前面的模式必須位于字符串的未端,或者位于一個換行符前? \b 匹配一個單詞邊界,也就是一個單詞字符和非單詞字符中間的點。要記住一個單詞字符是[a-zA-Z0-9]中的一個字符。位于一個單詞的詞首? \B 匹配一個非單詞字符邊界位置,不是一個單詞的詞首? 注:定位字符可以應用于字符或組合,放在字符串的左端或右端?
四. ? ? 分組字符? 分組字符 定 義 ?舉 例? () 此字符可以組合括號內模式所匹配的字符,它是一個捕獲組,也就是說模式匹配的字符作為最終設置了ExplicitCapture選項――默認狀態下字符不是匹配的一部分輸入字符串為:ABC1DEF2XY? 匹配3個從A到Z的字符和1個數字的正則表達式:([A-Z]{3}\d)? 將產生兩次匹配:Match 1=ABC1;Match 2=DEF2? 每次匹配對應一個組:Match1的第一個組=ABC;Match2的第1個組=DEF? 有了反向引用,就可以通過它在正則表達式中的編號以及C#和類Group,GroupCollection來訪問組。如果設置了ExplicitCapture選項,就不能使用組所捕獲的內容? (?:) 此字符可以組合括號內模式所匹配的字符,它是一個非捕獲組,這意味著模式所的字符將不作為一個組來捕獲,但它構成了最終匹配結果的一部分。它基本上與上面的組類型相同,但設定了選項ExplicitCapture輸入字符串為:1A BB SA1 C? 匹配一個數字或一個A到Z的字母,接著是任意單詞字符的正則表達式為:(?:\d|[A-Z]\w)? 它將產生3次匹配:每1次匹配=1A;每2次匹配=BB;每3次匹配=SA? 但是沒有組被捕獲? (?<name>) 此選項組合括號內模式所匹配的字符,并用尖括號中指定的值為組命名。在正則表達式中,可以使用名稱進行反向引用,而不必使用編號。即使不設置ExplicitCapture選項,它也是一個捕獲組。這意味著反向引用可以利用組內匹配的字符,或者通過Group類訪問輸入字符串為:Characters in Sienfeld included Jerry Seinfeld,Elaine Benes,Cosno Kramer and George Costanza能夠匹配它們的姓名,并在一個組llastName中捕獲姓的正則表達式為:\b[A-Z][a-z]+(?<lastName>[A-Z][a-z]+)\b? 它產生了4次匹配:First Match=Jerry Seinfeld; Second Match=Elaine Benes; Third Match=Cosmo Kramer; Fourth Match=George Costanza? 每一次匹配都對應了一個lastName組:? 第1次匹配:lastName group=Seinfeld? 第2次匹配:lastName group=Benes? 第3次匹配:lastName group=Kramer? 第4次匹配:lastName group=Costanza? 不管是否設置了選項ExplictCapture,組都將被捕獲? (?=) 正聲明。聲明的右側必須是括號中指定的模式。此模式不構成最終匹配的一部分正則表達式\S+(?=.NET)要匹配的輸入字符串為:The languages were Java,C#.NET,VB.NET,C,Jscript.Net,Pascal? 將產生如下匹配:〕? C#? VB? JScript.? (?!) 負聲明。它規定模式不能緊臨著聲明的右側。此模式不構成最終匹配的一部分\d{3}(?![A-Z])要匹配的輸入字符串為:123A 456 789111C? 將產生如下匹配:? 456? 789? (?<=) 反向正聲明。聲明的左側必須為括號內的指定模式。此模式不構成最終匹配的一部分正則表達式(?<=New)([A-Z][a-z]+)要匹配的輸入字符串為:The following states,New Mexico,West Virginia,Washington, New England? 它將產生如下匹配:? Mexico? England? (?<!) 反向正聲明。聲明的左側必須不能是括號內的指定模式。此模式不構成最終匹配的一部分正則表達式(?<!1)\d{2}([A-Z])要匹配的輸入字符串如下:123A456F789C111A? 它將實現如下匹配:? 56F? 89C? (?>) 非回溯組。防止Regex引擎回溯并且防止實現一次匹配假設要匹配所有以“ing”結尾的單詞。輸入字符串如下:He was very trusing? 正則表達式為:.*ing? 它將實現一次匹配――單詞trusting。“.”匹配任意字符,當然也匹配“ing”。所以,Regex引擎回溯一位并在第2個“t”停止,然后匹配指定的模式“ing”。但是,如果禁用回溯操作:(?>.*)ing? 它將實現0次匹配。“.”能匹配所有的字符,包括“ing”――不能匹配,從而匹配失敗?
五. ? ? 決策字符? 字 符 描 述 舉 例? (?(regex)yes_regex|no_regex) 如果表達式regex匹配,那么將試圖匹配表達式yes。否則匹配表達式no。正則表達式no是可先參數。注意,作出決策的模式寬度為0.這意味著表達式yes或no將從與regex表達式相同的位置開始匹配正則表達式(?(\d)dA|A-Z)B)要匹配的輸入字符串為:1A CB3A5C 3B? 它實現的匹配是:? 1A? CB? 3A? (?(group name or number)yes_regex|no_regex) ?如果組中的正則表達式實現了匹配,那么試圖匹配yes正則表達式。否則,試圖匹配正則表達式no。no是可先的參數正則表達式? (\d7)?-(?(1)\d\d[A-Z]|[A-Z][A-Z]要匹配的輸入字符串為:? 77-77A 69-AA 57-B? 它實現的匹配為:? 77-77A? -AA? 注:上面表中列出的字符強迫處理器執行一次if-else決策?
六. ? ? 替換字符? 字 符 描 述? $group 用group指定的組號替換? ${name} 替換被一個(?<name>)組匹配的最后子串? $$ 替換一個字符$? $& 替換整個的匹配? $^ 替換輸入字符串匹配之前的所有文本? $’ 替換輸入字符串匹配之后的所有文本? $+ 替換最后捕獲的組? $_ 替換整個的輸入字符串? 注:以上為常用替換字符,不全?
七. ? ? 轉義序列? 字 符 描 述? \\ 匹配字符“\”? \. 匹配字符“.”? \* 匹配字符“*”? \+ 匹配字符“+”? \? 匹配字符“?”? \| 匹配字符“|”? \( 匹配字符“(”? \) 匹配字符“)”? \{ 匹配字符“{”? \} 匹配字符“}”? \^ 匹配字符“^”? \$ 匹配字符“$”? \n 匹配換行符? \r 匹配回車符? \t 匹配制表符? \v 匹配垂直制表符? \f 匹配換面符? \nnn 匹配一個8進數字,nnn指定的ASCII字符。如\103匹配大寫的C? \xnn 匹配一個16進數字,nn指定的ASCII字符。如\x43匹配大寫的C? \unnnn 匹配由4位16進數字(由nnnn表示)指定的Unicode字符? \cV 匹配一個控制字符,如\cV匹配Ctrl-V?
八. ? ? 選項標志? 選項標志 名 稱? I IgnoreCase? M Multiline? N ExplicitCapture? S SingleLine? X IgnorePatternWhitespace? 注:選項本身的信作含義如下表所示:? 標 志 名 稱? IgnoreCase 使模式匹配不區分大小寫。默認的選項是匹配區分大小寫? RightToLeft 從右到左搜索輸入字符串。默認是從左到右以符合英語等的閱讀習慣,但不符合阿拉伯語或希伯來語的閱讀習慣? None 不設置標志。這是默認選項? Multiline 指定^和$可以匹配行首和行尾,以及字符串的開始和結尾。這意味著可以匹配每個用換行符分隔的行。但是,字符“.”仍然不匹配換行符? SingleLine 規定特殊字符“.”匹配任意的字符,包括換行符。默認情況下,特殊字符“.”不匹配換行符。通常與MultiLine選項一起使用? ECMAScript. ECMA(European Coputer Manufacturer’s Association,歐洲計算機生產商協會)已經定義了正則表達式應該如何實現,而且已經在ECMAScript規范中實現,這是一個基于標準的JavaScript。這個選項只能與IgnoreCase和MultiLine標志一起使用。與其它任何標志一起使用,ECMAScript都將產生異常? IgnorePatternWhitespace 此選項從使用的正則表達式模式中刪除所有非轉義空白字符。它使表達式能跨越多行文本,但必須確保對模式中所有的空白進行轉義。如果設置了此選項,還可以使用“#”字符來注釋下則表達式? Complied 它把正則表達式編譯為更接近機器代碼的代碼。這樣速度快,但不允許對它進行任何修改?
oracle的正則表達式(regular expression)簡單介紹?
目前,正則表達式已經在很多軟件中得到廣泛的應用,包括*nix(Linux, Unix等),HP等操作系統,PHP,C#,Java等開發環境。?
Oracle 10g正則表達式提高了SQL靈活性。有效的解決了數據有效性, 重復詞的辨認, 無關的空白檢測,或者分解多個正則組成? 的字符串等問題。?
Oracle 10g支持正則表達式的四個新函數分別是:REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR、和REGEXP_REPLACE。 它們使用POSIX 正則表達式代替了老的百分號(%)和通配符(_)字符。?
REGEXP_REPLACE(source_string,pattern,replace_string,position,occurtence,match_parameter)函數(10g新函數)? ? ?描述:字符串替換函數。相當于增強的replace函數。Source_string指定源字符表達式;pattern指定規則表達式;replace_string指定用于替換的字符串;position指定起始搜索位置;occurtence指定替換出現的第n個字符串;match_parameter指定默認匹配操作的文本串。? ? ?其中replace_string,position,occurtence,match_parameter參數都是可選的。?
REGEXP_SUBSTR(source_string, pattern[,position [, occurrence[, match_parameter]]])函數(10g新函數)? ? ? 描述:返回匹配模式的子字符串。相當于增強的substr函數。Source_string指定源字符表達式;pattern指定規則表達式;position指定起始搜索位置;occurtence指定替換出現的第n個字符串;match_parameter指定默認匹配操作的文本串。? ? ? 其中position,occurtence,match_parameter參數都是可選的? match_option的取值如下:? ‘c’ ? 說明在進行匹配時區分大小寫(缺省值);? ? 'i' ? 說明在進行匹配時不區分大小寫;? ? 'n' ? 允許使用可以匹配任意字符的操作符;? ? 'm' ? 將x作為一個包含多行的字符串。?
REGEXP_LIKE(source_string, pattern[, match_parameter])函數(10g新函數)? ? ? 描述:返回滿足匹配模式的字符串。相當于增強的like函數。Source_string指定源字符表達式;pattern指定規則表達式;match_parameter指定默認匹配操作的文本串。? ? ? 其中position,occurtence,match_parameter參數都是可選的?
REGEXP_INSTR(source_string, pattern[, start_position[, occurrence[, return_option[, match_parameter]]]])函數(10g新函數)? ? ? 描述: 該函數查找 pattern ,并返回該模式的第一個位置。您可以隨意指定您想要開始搜索的 start_position。 occurrence 參數默認為 1,除非您指定您要查找接下來出現的一個模式。return_option 的默認值為 0,它返回該模式的起始位置;值為 1 則返回符合匹配條件的下一個字符的起始位置?
特殊字符:? '^' 匹配輸入字符串的開始位置,在方括號表達式中使用,此時它表示不接受該字符集合。? '$' 匹配輸入字符串的結尾位置。如果設置了 RegExp 對象的 Multiline 屬性,則 $ 也匹配 'n' 或 'r'。? '.' 匹配除換行符 n之外的任何單字符。? '?' 匹配前面的子表達式零次或一次。? '*' 匹配前面的子表達式零次或多次。? '+' 匹配前面的子表達式一次或多次。? '( )' 標記一個子表達式的開始和結束位置。? '[]' 標記一個中括號表達式。? '{m,n}' 一個精確地出現次數范圍,m= <出現次數 <=n,'{m}'表示出現m次,'{m,}'表示至少出現m次。? ' |' 指明兩項之間的一個選擇。例子'^([a-z]+ |[0-9]+)$'表示所有小寫字母或數字組合成的字符串。? num 匹配 num,其中 num 是一個正整數。對所獲取的匹配的引用。? 正則表達式的一個很有用的特點是可以保存子表達式以后使用, 被稱為Backreferencing. 允許復雜的替換能力? 如調整一個模式到新的位置或者指示被代替的字符或者單詞的位置. 被匹配的子表達式存儲在臨時緩沖區中,? 緩沖區從左到右編號, 通過數字符號訪問。 下面的例子列出了把名字 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:]] 任何數字。? [[:alnum:]] 任何字母和數字。? [[:space:]] 任何白字符。? [[:upper:]] 任何大寫字母。? [[:lower:]] 任何小寫字母。? [[:punct:]] 任何標點符號。? [[:xdigit:]] 任何16進制的數字,相當于[0-9a-fA-F]。?
各種操作符的運算優先級? 轉義符? (), (?:), (?=), [] 圓括號和方括號? *, +, ?, {n}, {n,}, {n,m} 限定符? ^, $, anymetacharacter 位置和順序? | “或”操作?