Oracle正则表达式的用法
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
轉載于:https://www.cnblogs.com/Csharpblogs/archive/2011/07/02/2096454.html
總結
以上是生活随笔為你收集整理的Oracle正则表达式的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图片截剪
- 下一篇: Shell基本命令汇总