全部產品
Search
文件中心

MaxCompute:REGEXP_REPLACE

更新時間:Sep 25, 2024

source字串中第occurrence次匹配pattern的子串替換成指定字串replace_string後返回結果字串。

注意事項

REGEXP_REPLACE函數在Hive相容的資料類型版本中遵循Java regex規範。而在1.0和2.0資料類型版本中,則遵循MaxCompute的規範。

命令格式

string regexp_replace(string <source>, string <pattern>, string <replace_string>[, bigint <occurrence>])

參數說明

  • source:必填。STRING類型,待替換的字串。

  • pattern:必填。STRING類型常量或Regex。待匹配的模型。更多Regex編寫規範,請參見Regex規範pattern為空白串時返回報錯。

  • replace_string:必填。STRING類型,將匹配pattern的字串替換後的字串。

    說明
    • 如果replace_string為空白字串函數將刪除匹配pattern的字串後返回。

    • replace_string中可以包含後向引用\n,表示插入與pattern中第n個擷取的群組匹配的子字串,其中n的取值範圍為1~9,\0表示整個pattern。在使用時需要對反斜線進行轉義:\\1,或者使用原始字串(Raw String):R'(\1)'。

  • occurrence:可選。BIGINT類型常量,必須大於等於0,表示將第occurrence次匹配的字串替換為replace_string,為0時表示替換所有匹配的子串。為其他類型或小於0時,返回報錯。預設值為0。

傳回值說明

返回STRING類型。返回規則如下:

  • 當引用不存在的組時,其結果未定義。

  • 如果replace_string值為NULL且pattern有匹配,返回NULL。

  • 如果replace_string值為NULL但pattern不匹配,返回原字串。

  • sourcepatternoccurrence值為NULL時,返回NULL。

使用樣本

  • 樣本1:將字串按照指定規則進行替換。命令樣本如下:

    --返回Abcd。
    select regexp_replace("abcd", "a", "A", 0);
    --返回bcd。
    select regexp_replace("abcd", "a", "", 0);
    --返回19700101。
    select regexp_replace("1970-01-01", "-", "", 0);
    --返回abc。
    select regexp_replace("a1b2c3", "[0-9]", "", 0);
    --返回a1b2c。
    select regexp_replace("a1b2c3", "[0-9]", "", 3);
  • 樣本2:將123.456.7890字串中與([[:digit:]]{3})\\.([[:digit:]]{3})\\.([[:digit:]]{4})匹配的所有字串替換為(\\1)\\2-\\3。命令樣本如下。

    --返回(123)456-7890。
    select regexp_replace('123.456.7890', '([[:digit:]]{3})\\.([[:digit:]]{3})\\.([[:digit:]]{4})',
    '(\\1)\\2-\\3', 0);
  • 樣本3:將abcd字串中與指定規則匹配的字串進行替換。命令樣本如下。

    --返回a b c d 。
    select regexp_replace('abcd', '(.)', '\\1 ', 0);
    --返回a bcd。
    select regexp_replace('abcd', '(.)', '\\1 ', 1);
    --返回d。
    select regexp_replace("abcd", "(.*)(.)$", "\\2", 0);
  • 樣本4:假設表url_set中列名為URL的資料格式為www.simple@xxx.com,且每行的xxx完全不同,現需要將列中www後的所有內容都替換掉。命令樣本如下。

    --返回結果為wwwtest。
    select regexp_replace(url,'(www)(.*)','wwwtest',0) from url_set;
  • 樣本5:任一輸入參數為NULL。命令樣本如下。

    --返回NULL。
    select regexp_replace('abcd', '(.)', null, 0);
  • 樣本6:引用不存在的組。命令樣本如下。

    --因為pattern中只定義了一個組,引用的第二個組不存在。
    --請避免這樣使用,引用不存在的組的結果未定義。
    regexp_replace("abcd", "(.)", "\\2", 0) = "" 或 "abcd"
    --因為在pattern中沒有組的定義,所以\1引用了不存在的組,
    --請避免這樣使用,引用不存在的組的結果未定義。
    regexp_replace("abcd", "a", "\\1", 0) = "bcd" 或 "abcd"

相關函數

REGEXP_REPLACE函數屬於字串函數,更多尋找字串、轉換字串格式的相關函數請參見字串函數