全部產品
Search
文件中心

AnalyticDB:正則函數

更新時間:Jul 06, 2024

本文介紹AnalyticDB MySQL版叢集支援的正則函數。

前提條件

AnalyticDB MySQL版叢集的核心版本需為3.1.5.10及以上版本。
說明 如何查看叢集的核心版本,請參見如何查看執行個體版本資訊

REGEXP_INSTR

regexp_instr(source, pattern[, position[, occurrence[, option]]] )
  • 命令說明:字串source中搜尋匹配Regex的子字串,並返回該子字串在字串source中的位置。如果指定position,則從第position個字元開始匹配,預設為1;如果指定occurrence,則返回第occurrence個匹配的位置,預設為1。option可以是0或1,預設為0,option為0時返回匹配子字串的起始位置;option為1時返回匹配子字串結束位置的下一個字元位置。
  • 輸入值說明:
    • source:待搜尋的字串,取實值型別為VARCHAR。
    • pattern:Regex。
    • position:表示從source的第一個字元開始匹配,position預設為1。取實值型別為BIGINT。
    • occurrence:表示返回第一次匹配的子字串,occurrence預設為1。取實值型別為BIGINT。
    • option:表示指定返回的位置,option可以是0或1,預設為0。取實值型別為BIGINT。
  • 傳回值說明:返回BIGINT類型。沒有匹配到字串時,返回0。
  • 樣本:
    • 樣本1
      SELECT REGEXP_INSTR('dog cat dog', 'dog') as res;
      返回結果如下。
      +-----+
      | res |
      +-----+
      |   1 |
      +-----+
    • 樣本2
      SELECT REGEXP_INSTR('dog cat dog', 'dog', 1, 2) as res;
      返回結果如下。
      +-----+
      | res |
      +-----+
      |   9 |
      +-----+
    • 樣本3
      SELECT REGEXP_INSTR('dog cat dog', 'dog', 1, 1, 1) as res;
      返回結果如下。
      +-----+
      | res |
      +-----+
      |   4 |
      +-----+

REGEXP_MATCHES

regexp_matches(source, pattern[, flag])
  • 命令說明:返回字串source中匹配Regex的子字串構成的數組。如果包含flag 'g',則返回所有匹配的子字串結果,數組中可有多個元素;否則只返回匹配的第一個結果,數組中只有一個結果。如果pattern中包含帶括弧的子Regex,那麼結果數組中的元素為各個子Regex對應的子字串,否則為單個匹配pattern的子字串。
  • 輸入值說明:
    • source:待搜尋的字串,取實值型別為VARCHAR。
    • pattern:Regex。
    • flag:標誌一個或多個控制函數的字元,取實值型別為VARCHAR。
  • 傳回值說明:返回array(array(VARCHAR))類型。沒有匹配到字串時,返回空數組。
  • 樣本:
    • 樣本1
      SELECT regexp_matches('foobarbequebaz', '(bar)(beque)');
      返回結果如下。
      +---------------------+
      | regexp_matches      |
      +---------------------+
      | [["bar","beque"]]   |
    • 樣本2
       SELECT regexp_matches('foobarbequebaz', 'barbeque');
      返回結果如下。
      +---------------------+
      | regexp_matches      |
      +---------------------+
      | [["barbeque"]]      |        
    • 樣本3
      SELECT regexp_matches('foobarbequebazilbarfbonk', '(b[^b]+)(b[^b]+)', 'g');
      返回結果如下。
      +------------------------------------------+
      | regexp_matches                           |
      +------------------------------------------+
      | [["bar","beque"], ["bazil","barf"]]      |

REGEXP_REPLACE

regexp_replace(source, pattern, replacement[, position[, occurrence]])
  • 命令說明:將字串source中匹配pattern的子字串替換為replacement。如果指定position,則從第position個字元開始匹配和替換,預設為1;如果指定occurrence,則替換第occurrence個匹配的子字串,預設為0,表示替換全部。
  • 輸入值說明:
    • source:待搜尋的字串,取實值型別為VARCHAR。
    • pattern:Regex。
    • replacement:將匹配pattern的字串替換後的字串。取實值型別為VARCHAR。
    • position:表示從source的第一個字元開始匹配和替換,position預設為1。取實值型別為BIGINT。
    • occurrence:表示第occurrence次匹配的字串替換為replacement,occurrence預設為0。取實值型別為BIGINT。
  • 傳回值說明:返回VARCHAR類型。沒有匹配到字串時,返回原字串。
  • 樣本:
    • 樣本1
      SELECT REGEXP_REPLACE('abc def ghi', '[a-z]+', 'X') as res;
      返回結果如下。
      +-------+
      | res   |
      +-------+
      | X X X |
      +-------+
    • 樣本2
      SELECT REGEXP_REPLACE('abc def ghi', '[a-z]+', 'X', 1, 3) as res;
      返回結果如下。
      +-----------+
      | res       |
      +-----------+
      | abc def X |
      +-----------+

REGEXP_SUBSTR

regexp_substr(source, pattern[, position[, occurrence]])
  • 命令說明:返回字串source中匹配Regex的子字串。如果指定position,則從第個字元開始匹配,position預設為1;如果指定occurrence,則返回第occurrence個匹配的子字串,occurrence預設為1。
  • 輸入值說明:
    • source:待搜尋的字串,取實值型別為VARCHAR。
    • pattern:Regex。
    • position:表示從source的第一個字元開始匹配,position預設為1。取實值型別為BIGINT。
    • occurrence:表示返回第一次匹配的子字串,occurrence預設為1。取實值型別為BIGINT。
  • 傳回值說明:返回VARCHAR類型。沒有匹配到字串時,返回NULL。
  • 樣本:
    • 樣本1
      SELECT REGEXP_SUBSTR('abc def ghi', '[a-z]+', 1, 3) as res;
      返回結果如下。
      +------+
      | res  |
      +------+
      | ghi  |
      +------+
    • 樣本2
      SELECT REGEXP_SUBSTR('abc def ghi', '[a-z]+') as res;
      返回結果如下。
      +------+
      | res  |
      +------+
      | abc  |
      +------+