跳轉到內容

Oracle 資料庫/正則表示式支援

來自華夏公益教科書,開放的書籍,開放的世界

列出使用正則表示式的優勢

[編輯 | 編輯原始碼]

使用正則表示式搜尋、匹配和替換字串

[編輯 | 編輯原始碼]
正則表示式
表示式 描述
錨定字元 ^ 行首
$ 行尾
量詞字元 * 匹配 0 次或多次
+ 匹配 1 次或多次
? 匹配 0 次或 1 次
{m} 精確匹配 m 次
{m,} 至少匹配 m 次
{m, n} 至少匹配 m 次,但不超過 n 次
\n 導致前面的表示式重複 n 次
選擇和分組 | 分隔選擇項,通常與分組運算子 () 一起使用
( ) 將子表示式分組為一個單元,用於選擇、量詞或反向引用(參見“反向引用”部分)
[char] 表示一個字元列表;字元列表中的大多數元字元被理解為字面量,但字元類、^ 和 - 元字元除外
POSIX 字元 [:alnum:] 字母數字字元
[:alpha:] 字母字元
[:blank:] 空格字元
[:cntrl:] 控制字元(非列印字元)
[:digit:] 數字
[:graph:] 任何 [:punct:], [:upper:], [:lower:], 和 [:digit:] 字元
[:lower:] 小寫字母字元
[:print:] 可列印字元
[:punct:] 標點符號字元
[:space:] 空格字元(非列印字元),例如回車符、換行符、垂直製表符和換頁符
[:upper:] 大寫字母字元
[:xdigit:] 十六進位制字元
等價類 = = 嵌入在方括號中的等價類,它匹配一個基本字母及其所有帶重音的版本。例如,等價類 '[=a=]' 匹配 ä 和 â。
匹配選項 c 區分大小寫匹配
i 不區分大小寫匹配
m 將源字串視為多行,啟用錨字元
n 允許句點 (.) 匹配任何換行符
x 忽略空白字元

REGEXP_LIKE

[編輯 | 編輯原始碼]

REGEXP_LIKE 執行復雜的正則表示式模式匹配,並支援比 LIKE 更廣泛的字串模式範圍。此函式在 10g 中引入。

姓以 T 開頭,第二個字元是 'o' 或 'u'

SELECT last_name
FROM   hr.employees
WHERE  REGEXP_LIKE(last_name, '^T[ou]');

姓以 'T' 開頭,以 'r' 結尾

select last_name
from   hr.employees
where  REGEXP_LIKE( last_name, '^T.*r$' );

名字是 'Steven' 或 'Stephen'

SELECT first_name
FROM hr.employees
WHERE REGEXP_LIKE (first_name, '^Ste(v|ph)en$');

姓包含雙母音字元(例如,'aa'、'ee'、'ii'、'oo'、'uu'),匹配不區分大小寫

SELECT last_name
FROM hr.employees
WHERE REGEXP_LIKE (last_name, '([aeiou])\1', 'i');

REGEXP_INSTR

[編輯 | 編輯原始碼]

REGEXP_INSTR 執行復雜的正則表示式模式匹配,並支援比 INSTR 更廣泛的字串模式範圍。此函式在 10g 中引入。

顯示第一個小寫母音字元的位置

SELECT last_name, REGEXP_INSTR(last_name, '[aeiou]')
FROM   hr.employees;

REGEXP_SUBSTR

[編輯 | 編輯原始碼]

REGEXP_SUBSTR 執行復雜的正則表示式模式匹配,並支援比 SUBSTR 更廣泛的字串模式範圍。此函式在 10g 中引入。

如果姓以 'A' 或 'C' 開頭,則提取第一個字元

SELECT last_name, REGEXP_SUBSTR(last_name, '^[AC]')
FROM   hr.employees;

從第 3 個位置開始,從姓中提取 2 個字元

SELECT last_name, REGEXP_SUBSTR(last_name, '..',3)
FROM   hr.employees;

REGEXP_COUNT

[編輯 | 編輯原始碼]

REGEXP_COUNT 對值執行計數,它與聚合函式 COUNT 不同。此函式在 11g 中引入。

在姓中查詢母音模式的出現次數

SELECT last_name, REGEXP_COUNT( last_name, '[aeiou]' )
FROM   hr.employees;
華夏公益教科書