l 方括號(hào)表達(dá)示
方括號(hào)表達(dá)式 |
描述 |
[[:alnum:]] |
字母和數(shù)字混合的字符 |
[[:alpha:]] |
字母字符 |
[[:cntrl:]] |
控制字符 |
[[:digit:]] |
數(shù)字字符 |
[[:graph:]] |
圖像字符 |
[[:lower:]] |
小寫字母字符 |
[[:print:]] |
打印字符 |
[[:punct:]] |
標(biāo)點(diǎn)符號(hào)字符 |
[[:space:]] |
空格字符 |
[[:upper:]] |
大寫字母字符 |
[[:xdigit:]] |
十六進(jìn)制數(shù)字字符 |
l 元字符
元字符 |
描述 |
*? |
如果有前面字符串的0次以上出現(xiàn)時(shí)匹配 |
+? |
如果有前面字符串的1次以上出現(xiàn)時(shí)匹配 |
{m} |
m是整數(shù)。它文本中找出給定子表達(dá)式的恰好m次出現(xiàn) |
{n}? |
前面的字符串只出現(xiàn)一次時(shí)匹配 |
{m,} |
M是整數(shù)。它在文本中找出給定子表達(dá)示的至少m次出現(xiàn) |
{n,}? |
匹配前面的字符串至少n次 |
{m,n} |
M和n是整數(shù)。它在文本中找出給定子表達(dá)示的m到n次出現(xiàn) |
{n,m} |
匹配前面的字符串至少到n次,但不多于m次 |
c |
查詢操作區(qū)分大小寫 |
i |
查詢操作不區(qū)分大水寫 |
m |
多行字符串上的查詢,在源字符串包含多行時(shí),該查詢允許用(^)模式匹配字符串的開始 |
n |
通常匹配單個(gè)字符,也可以匹配新行 |
x |
需要忽略正則表達(dá)示中的空格字符時(shí),使用參數(shù)‘X’ |
\A |
匹配字符串首,而不是行首,因而多行字符串不能匹配每一行 |
\d |
匹配任意數(shù)字字符 |
\D |
匹配任意非數(shù)字字符 |
\s |
匹配任意空格字符 |
\S |
匹配任意非空格字符 |
\w |
匹配任意字符和數(shù)字。該字符和[:alnum:]之間的不同是\w包括下劃線字符 |
\W |
匹配任意非空字符串 |
* |
通配符。找出在文本中包含0或多次給定子表達(dá)式出現(xiàn)的記錄 |
+ |
找出在文本中包含1或多次給定子表達(dá)式出現(xiàn)的記錄 |
? |
找出在文本中包含0次或1次給定子表達(dá)示出現(xiàn)的記錄 |
. |
匹配文本中的任意字符 |
^ |
錨。如果該字符后的表達(dá)式出現(xiàn)在行首,則匹配成功 |
$ |
錨。如果該字符后的表達(dá)式出現(xiàn)在行首,則匹配成功 |
| |
分隔符,使用方法和OR相同 |
(….) |
分組子表達(dá)式 |
l 正則表達(dá)式運(yùn)算符和函數(shù)
a) REGEXP_SUBSTR
REGEXP_SUBSTR為指定字符串的一部分與正則表達(dá)式建立匹配。語法如下:
REGEXP_SUBSTR(source_string,
pattern,
start_position,
occurrence,
match_parameter)
其中source_string是必須的。可以是帶引號(hào)的字符串或者變量。Pattern是用單引號(hào)引用的與正則表達(dá)式。Start_position指定了在字符串中的準(zhǔn)確位置,默認(rèn)值為1。Occurrence是一個(gè)選項(xiàng),指定在源字符串匹配過程中相對其他字符串,哪個(gè)字符串應(yīng)該匹配。最后,match_parameter也是一個(gè)選項(xiàng),指定在匹配時(shí)是否區(qū)分大水寫。
示例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返回與正則表達(dá)式匹配的字符和字符串的位置。如
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函數(shù)類似,提供一種修改與所給正則表達(dá)式匹配的字符串的方法。作用包括糾正拼寫錯(cuò)誤、格式化輸入輸出的文本。
如電話號(hào)碼的格式為: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運(yùn)算符與LIKE運(yùn)算符相似,但是功能更強(qiáng)大,因?yàn)樗С质褂门c此正則表達(dá)式與文本進(jìn)行匹配。語法如下:
REGEXP_LIKE(source_string, pattern, match_parameter)
Source_string可以是文字字符串,如果前面例中的字符串,也可以是包含某些字符串的變量或列。Pattern是要進(jìn)行匹配的正則表達(dá)式。Match_parameter用于指定在匹配時(shí)是否區(qū)分大小寫。
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
轉(zhuǎn)載自:http://space.itpub.net/20948385/viewspace-665735