將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不匹配,返回原字串。
source、pattern或occurrence值為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函數屬於字串函數,更多尋找字串、轉換字串格式的相關函數請參見字串函數。