Oracle正規表示式(regular expression)
元字元 |
字元含義 |
舉例說明 |
^ |
匹配字串的開始位置(在[]中使用,此時它表示不接受該字符集合。 |
^a:匹配以a開始的字串 [^a]:匹配不含a的字串 |
- |
當使用在a-m表示範圍; 當使用在第一個字元時表示 連字串,如[-abc] |
|
$ |
匹配字元結束位置 |
‘a$’:匹配以a結束的字串 |
. |
匹配除換行符 n之外的任何單字元。 |
|
? |
匹配前面的子表示式零次或一次 |
tr(y(ing)?):可以表示try或者trying |
* |
匹配前面的子表示式零次或多次 |
|
+ |
匹配前面的子表示式一次或多次 |
|
() |
標記一個子表示式的開始和結束位置 |
a(b)*可以匹配 ab,abb,abbb,youabb (c|d)匹配c或d |
[] |
標記一箇中括號表示式 |
[cd]匹配選擇c或d等同於 (c|d)。匹配的是單字元,[^cd]是匹配c,d之外的單字元。 [a-z]表示所有小寫字母 |
{m,n} |
m= <出現次數 <=n,'{m}'表示出現m次,'{m,}'表示至少出現m次。 |
|
| |
表示或者的關係。指明兩項之間的一個選擇 |
字元簇 |
字元含義 |
[[:alnum:]] |
字母和數字混合的字元 |
[[:alpha:]] |
字母字元 |
[[:cntrl:]] |
控制字元 |
[[:digit:]] |
數字字元 |
[[:graph:]] |
影像字元 |
[[:lower:]] |
小寫字母字元 |
[[:print:]] |
列印字元 |
[[:punct:]] |
標點符號字元 |
Oracle支援正規表示式的內建函式
名稱 |
語法 |
備註 |
REGEXP_LIKE |
REGEXP_LIKE (source_string, pattern [, match_parameter] ) |
source_string: 源字串 Pattern: 正規表示式 match_parameter: 匹配模式(i:不區分大小寫;c:區分大小寫;n:允許使用可以匹配任意字串的操作符;m:將x作為一個包含多行的字串。 |
REGEXP_REPLACE |
REGEXP_REPLACE (source_string, pattern [,replace_string] [,position] [,occurtence] [,match_parameter] ) |
replace_string: 用於替換的字串 Position: 開始搜尋的起始位置 occurtence 指定替換第n次出現字串 其他同上。 |
REGEXP_SUBSTR |
REGEXP_SUBSTR (source_string, pattern [,position [,occurrence [,match_parameter]]] ) |
Position: 指定在字串中準確位置,預設為1 Occurrence: 指定在源字串匹配過程中相對其他字串,哪個字串應該匹配。例如 select regexp_substr('The zip code 80831 is for falcon, co', '[[:alpha:]]{3,}', 1, 3) from dual; 結果選擇的是code而非The或zip。 |
REGEXP_INSTR |
REGEXP_INSTR (source_string, pattern [,start_position [,occurrence [,return_option [,match_parameter]]]] ) |
start_position: 開始搜尋位置 Occurrence: 第n次出現pattern,預設為1 return_option: 0:pattern的起始位置 1:pattern下一個字元起始位置 預設為0 |
REGEXP_COUNT |
REGEXP_COUNT (source_string, pattern [[,start_position] [,match_parameter]]) |
11g新增的函式,表示pattern在原字串中出現的次數 start_position: 開始搜尋的位置 |
Oracle支援正規表示式函式舉例:
a) REGEXP_SUBSTR
REGEXP_SUBSTR為指定字串的一部分與正規表示式建立匹配。語法如下:
REGEXP_SUBSTR(source_string,
pattern,
start_position,
occurrence,
match_parameter)
其中source_string是必須的。可以是帶引號的字串或者變數。Pattern是用單引號引用的與正規表示式。Start_position指定了在字串中的準確位置,預設值為1。Occurrence是一個選項,指定在源字串匹配過程中相對其他字串,哪個字串應該匹配。最後,match_parameter也是一個選項,指定在匹配時是否區分大水寫。
示例1:
SQL> select regexp_substr('The zip code 80831 is for falcon, co','[[:digit:]]{5}' ) REGEXP_SUBSTR from dual;
REGEXP_SUBSTR
-------------
80831
示例2:
SQL> select regexp_substr('The zip code 80831 is for falcon, co', '[[:alpha:]]{3,}', 1, 3) REGEXP_SUBSTR from dual;
REGEXP_SUBSTR
-------------
code
示例3
SQL> select regexp_substr('comments or questions - email feedback@plsqlbook.com', '[[:alnum:]](([_\.\-\+]?[[:alnum:]]+)*)@' ||
2 '([[:alnum:]]+)(([\.-]?[[:alnum:]]+)*)\.([[:alpha:]]{2,})') REGEXP_SUBSTR
3 from dual;
REGEXP_SUBSTR
----------------------
feedback@plsqlbook.com
b) REGEXP_INSTR
REGEXP_INSTR返回與正規表示式匹配的字元和字串的位置。如
SQL> select regexp_instr('The zip code 80831 is for falcon, co', '[[:digit:]]{5}') REGEXP_INSTR from dual;
REGEXP_INSTR
------------
14
c) REGEXP_REPLACE
REGEXP_REPLACE與REPLACE函式類似,提供一種修改與所給正規表示式匹配的字串的方法。作用包括糾正拼寫錯誤、格式化輸入輸出的文字。
如電話號碼的格式為:719-111-1111。使用REGEX_REPLACER的返回值是:
SQL> select regexp_replace('Reformat the phone number 719-111-1111 ...',
2 '[1]?[-.]?(\(?[[:digit:]]{3}\)?)+[- .]?'
3 || '([[:digit:]]{3})[- .]?([[:digit:]]{4})',
4 ' (\1) \2-\3') regexp_replace
5 from dual;
REGEXP_REPLACE
---------------------------------------------
Reformat the phone number (719) 111-1111 ...
S
d) REGEXP_LIKE
REGEXP_LIKE運算子與LIKE運算子相似,但是功能更強大,因為它支援使用與此正規表示式與文字進行匹配。語法如下:
REGEXP_LIKE(source_string, pattern, match_parameter)
Source_string可以是文字字串,如果前面例中的字串,也可以是包含某些字串的變數或列。Pattern是要進行匹配的正規表示式。Match_parameter用於指定在匹配時是否區分大小寫。
SQL> select ename, job
2 from emp
3 where regexp_like(job, '(clerk|analyst)', 'i');
ENAME JOB
---------- ---------
SMITH CLERK
SCOTT ANALYST
ADAMS CLERK
JAMES CLERK
FORD ANALYST
MILLER CLERK
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25744374/viewspace-734600/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 正規表示式(regular expression)Express
- oracle中的正規表示式(regular expression)OracleExpress
- 正規表示式regular expression詳述Express
- oracle的正規表示式(regular expression)簡單介紹OracleExpress
- vi 中的正規表示式 (Regular Expression)(轉)Express
- [Shell] awk學習(3)-regular expression 正規表示式Express
- [LeetCode] Regular Expression Matching 正規表示式匹配LeetCodeExpress
- ORACLE 正規表示式Oracle
- oracle正規表示式Oracle
- [LeetCode Python3]10. Regular Expression Matching手把手詳解——正規表示式(一)LeetCodePythonExpress
- Oracle正規表示式函式Oracle函式
- oracle 正規表示式2Oracle
- oracle正規表示式(二)Oracle
- oracle 整理 正規表示式1Oracle
- Oracle正規表示式的用法Oracle
- Oracle中的正規表示式Oracle
- Oracle正規表示式學習Oracle
- Oracle sql中的正規表示式OracleSQL
- Oracle 10g正規表示式Oracle 10g
- oracle 10g 正規表示式Oracle 10g
- 正規表示式
- 【正規表示式】常用的正規表示式(數字,漢字,字串,金額等的正規表示式)字串
- Oracle OCP(16):正規表示式的支援Oracle
- oracle正規表示式記錄0402Oracle
- Oracle正規表示式匹配中文的方法Oracle
- oracle10g支援正規表示式Oracle
- 【JavaScript】正規表示式JavaScript
- php –正規表示式PHP
- 正規表示式 教程
- 正規表示式 split()
- java正規表示式Java
- PHP正規表示式PHP
- javascript正規表示式JavaScript
- 【java】正規表示式Java
- 初探正規表示式
- [js]正規表示式JS
- js正規表示式JS
- javascript–正規表示式JavaScript