l 方括號表達示
方括號表示式 | 描述 |
[[:alnum:]] | 字母和數字混合的字元 |
[[:alpha:]] | 字母字元 |
[[:cntrl:]] | 控制字元 |
[[:digit:]] | 數字字元 |
[[:graph:]] | 影像字元 |
[[:lower:]] | 小寫字母字元 |
[[:print:]] | 列印字元 |
[[:punct:]] | 標點符號字元 |
[[:space:]] | 空格字元 |
[[:upper:]] | 大寫字母字元 |
[[:xdigit:]] | 十六進位制數字字元 |
l 元字元
元字元 | 描述 |
*? | 如果有前面字串的0次以上出現時匹配 |
+? | 如果有前面字串的1次以上出現時匹配 |
{m} | m是整數。它文字中找出給定子表示式的恰好m次出現 |
{n}? | 前面的字串只出現一次時匹配 |
{m,} | M是整數。它在文字中找出給定子表達示的至少m次出現 |
{n,}? | 匹配前面的字串至少n次 |
{m,n} | M和n是整數。它在文字中找出給定子表達示的m到n次出現 |
{n,m} | 匹配前面的字串至少到n次,但不多於m次 |
c | 查詢操作區分大小寫 |
i | 查詢操作不區分大水寫 |
m | 多行字串上的查詢,在源字串包含多行時,該查詢允許用(^)模式匹配字串的開始 |
n | 通常匹配單個字元,也可以匹配新行 |
x | 需要忽略正則表達示中的空格字元時,使用引數‘X’ |
A | 匹配字串首,而不是行首,因而多行字串不能匹配每一行 |
d | 匹配任意數字字元 |
D | 匹配任意非數字字元 |
s | 匹配任意空格字元 |
S | 匹配任意非空格字元 |
w | 匹配任意字元和數字。該字元和[:alnum:]之間的不同是w包括下劃線字元 |
W | 匹配任意非空字串 |
* | 萬用字元。找出在文字中包含0或多次給定子表示式出現的記錄 |
+ | 找出在文字中包含1或多次給定子表示式出現的記錄 |
? | 找出在文字中包含0次或1次給定子表達示出現的記錄 |
. | 匹配文字中的任意字元 |
^ | 錨。如果該字元後的表示式出現在行首,則匹配成功 |
$ | 錨。如果該字元後的表示式出現在行首,則匹配成功 |
| | 分隔符,使用方法和OR相同 |
(….) | 分組子表示式 |
l 正規表示式運算子和函式
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
轉自:http://space.itpub.net/20948385/viewspace-665735