【SQL查詢】正則表達式匹配字符串

1. 元字符說明web

元字符 含義
^ 匹配輸入字符串的開始位置。
$ 匹配輸入字符串的結尾位置。
* 匹配前面的字符零次或屢次。
+ 匹配前面的字符一次或屢次。
? 匹配前面的字符零次或一次。
. 匹配任何字符,除了空.
| 指明兩項之間的一個選擇。例子'^([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_likesql

    1) 語法express

      REGEXP_LIKE ( expression, pattern [, match_parameter ] )oracle

    2) 參數說明函數

      expression:字符表達式spa

      pattern:正則表達式code

      match_parameter:可選的。它容許修改REGEXP_LIKE條件的匹配行爲。它能夠是如下的組合:regexp

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

    3) 示例orm

--與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
相關文章
相關標籤/搜索