【SQL查詢】正則表達式匹配字符串_regexp_like/substr/instr/replace


1. 元字符說明

元字符 含義
^ 匹配輸入字符串的開始位置。
$ 匹配輸入字符串的結尾位置。
* 匹配前面的字符零次或多次。
+ 匹配前面的字符一次或多次。
? 匹配前面的字符零次或一次。
. 匹配任何字符,除了空.
| 指明兩項之間的一個選擇。例子'^([a-z]+|[0-9]+)$'表示所有小寫字母或數字組合成的字符串。
[ ] 用於指定要在其中嘗試匹配列表中任何一個字符的匹配列表。
[^ ] 用於指定一個不匹配列表,要嘗試匹配除列表中的字符之外的任何字符。
[…] 接受括號中的任一字符
[^…] 不接受括號中的任一字符
( ) 標記一個子表達式的開始和結束位置(字符組)。
{m} 正好匹配   m 次
{m,} 至少匹配   m 次
{m,n} 一個精確地出現次數范圍,m=<出現次數<=n,'{m}'表示出現m次,'{m,}'表示至少出現m次。
[..]  匹配一個可以是多個字符的排序規則元素。
[::] 匹配字符類。
[==] 匹配等價類。
\n n是1和9之間的數字。匹配在遇到\n之前在()中找到的第n個子表達式。
\d 匹配一個數字字符.
\D 匹配一個非數字字符.
\w 匹配包括下划線的任何單詞字符.
\W 匹配任何非單詞字符.
\s 任一空白字符,包括制表符,換行符,回車符,換頁符和垂直制表符
\S 匹配任何非空白字符.
\A 前面的模式必須位於字符串的開始位置,忽略多行標志
\Z 前面的模式必須位於字符串的未端,或者位於一個換行符前
*?  與前前面的模式匹配零個或多個匹配項。
+? 匹配前面一個模式一次或多次。
?? 匹配前面一個模式零或一個發生。
{n}? 匹配前面的模式n次。
{n,}? 與前一個模式匹配至少n次
{n,m}? 與前一個模式匹配至少n次,但不超過m次。

2. oracle正則表達式的4個函數

  (1) regexp_like

    1) 語法

      REGEXP_LIKE ( expression, pattern [, match_parameter ] )

    2) 參數說明

      expression:字符表達式

      pattern:正則表達式

      match_parameter:可選的。它允許修改REGEXP_LIKE條件的匹配行為。它可以是以下的組合:

描述
'c' 執行區分大小寫匹配。
'i' 執行不區分大小寫的匹配。
'n' 允許句點字符(.)與換行符匹配。 默認情況下,句點是通配符。
'm' 表達式假定有多個行,其中^是行的開始,$是行的結尾,不管表達式中這些字符的位置如何。默認情況下,表達式假定為單行。
'x' 忽略空格字符。默認情況下,空格字符與任何其他字符一樣匹配。

    3) 示例

--與like的功能類似
select * from fzq where regexp_like(value,'1....60');

 

  (2) regexp_substr

    1) 語法

      regexp_substr(source_string,pattern[,position[,occurrence[,match_parameter]]])

    2) 參數說明

      source_string:源串,可以是常量,也可以是某個值類型為串的列。

      pattern:正則表達式

      position:從源串開始搜索的位置。默認為1。

      occurrence:指定源串中的第幾次出現。默認值1.

      match_parameter:省略該參數時:默認區分大小寫、句點不匹配換行符、源串被看作一行。

 

說明
i'     用於不區分大小寫的匹配。
c' 用於區分大小寫的匹配。
n' 允許將句點“.”作為通配符來匹配換行符。如果省略改參數,句點將不匹配換行符。
m'  將源串視為多行。即將“^”和“$”分別看做源串中任意位置任意行的開始和結束,而不是看作整個源串的開始或結束。

 

    3) 示例

SELECT REGEXP_SUBSTR ('hello my phone is 520 ', '[0-9]+') FROM dual; --520

 

  (3) regexp_instr

    1) 語法

      regexp_instr(source_string,pattern[,position[,occurrence[,return_option[,match_parameter]]]])

    2) 參數說明

      source_string:源串,可以是常量,也可以是某個值類型為串的列。

      pattern:正則表達式

      position:可選。搜索在字符串中的開始位置。如果省略,則默認為1,這是字符串中的第一個位置。

      occurrence:可選。它是模式字符串中的第n個匹配位置。如果省略,默認為1。

      return_option:可選 指定Oracle返回的位置。如果指定0,那么Oracle將返回出現的第一個字符的位置。這是默認的。如果指定1,則Oracle返回字符之后發生的位置。

      match_parameter:可選。它允許你修改REGEXP_INSTR功能匹配的行為。它可以是以下的組合:

 

描述
'c' 執行區分大小寫匹配。
'i' 執行不區分大小寫的匹配。
'n' 允許句點字符(.)與換行符匹配。 默認情況下,句點是通配符。
'm' 表達式假定有多個行,其中^是行的開始,$是行的結尾,不管表達式中這些字符的位置如何。默認情況下,表達式假定為單行。
'x' 忽略空格字符。默認情況下,空格字符與任何其他字符一樣匹配。

    3) 示例

SELECT REGEXP_INSTR ('Itmyhome', 'a|i|o|e|u')
FROM dual;

-- Result: 6

 

  (4) regexp_replace

    1) 語法

      regexp_replace(source_string,pattern[,replace_string[,position[,occurrence[,match_parameter]]]])

    2) 參數說明

      source_string:源串,可以是常量,也可以是某個值類型為串的列。

      pattern:正則表達式

      replace_string:可選。匹配的模式將被替換replace_string字符串。如果省略replace_string參數,將刪除所有匹配的模式,並返回結果字符串。

      position:可選。在字符串中的開始位置搜索。如果省略,則默認為1。

      occurrence:可選。是一個非負整數默認為1,指示替換操作的發生:如果指定0,那么所有出現將被替換字符串。如果指定了正整數n,那么將替換第n次出現。

      match_parameter:可選。它允許你修改REGEXP_REPLACE功能匹配的行為。它可以是以下的組合:

描述
'c' 執行區分大小寫匹配。
'i' 執行不區分大小寫的匹配。
'n' 允許句點字符(.)與換行符匹配。 默認情況下,句點是通配符。
'm' 表達式假定有多個行,其中^是行的開始,$是行的結尾,不管表達式中這些字符的位置如何。默認情況下,表達式假定為單行。
'x' 忽略空格字符。默認情況下,空格字符與任何其他字符一樣匹配。

    3) 示例   

SELECT REGEXP_REPLACE ('itmyhome is my network id', '^(\S*)', 'luck')
FROM dual;

Result: luck is my network id


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM