replace_stringで指定された文字列を使用して、source文字列のoccurrenceで指定されたn番目のオカレンスで、特定のパターンに一致する部分文字列を置き換え、結果を返します。
注意事項
Hiveと互換性のあるデータ型のバージョンでは、REGEXP_REPLACE関数はJava regex仕様に従います。 ただし、データ型バージョン1.0および2.0では、MaxComputeの仕様に従います。
構文
string regexp_replace(string <source>, string <pattern>, string <replace_string>[, bigint <occurrence>])パラメーター
source: 必須です。 STRING型の値。 このパラメータは、置き換える文字列を指定します。
pattern: 必須です。 STRING型または正規表現の定数。 このパラメーターは、指定した部分文字列が一致する必要があるパターンを指定します。 正規表現の詳細については、「正規表現」をご参照ください。 patternが空の文字列の場合、エラーが返されます。
replace_string: 必須です。 STRING型の値。 この値は、パターンに一致する文字列を置き換えるために使用されます。
説明replace_stringが空の文字列の場合、関数はパターンに一致する文字列を削除した後に戻ります。
replace_stringの値には、後方参照 \nを含めることができます。 replace_stringの値に逆方向参照が含まれている場合、patternで指定されたn番目のキャプチャグループと一致する部分文字列が挿入されます。 nは1から9までの数字です。 replace_stringの値に後方参照 \0が含まれている場合、パターン全体に一致する部分文字列が挿入されます。 バックスラッシュ (\) はエスケープする必要があります。 たとえば、replace_stringの値に後方参照 \1が含まれている場合、後方参照のバックスラッシュ (\) をエスケープする必要があり、後方参照 \1は (\\1) と表されます。 生の文字列R'(\1)'を使用して、後方参照 \1を表すこともできます。
occurrence: オプション。 BIGINT型の定数。0以上でなければなりません。 このパラメーターの値は、occurrenceで指定されたn番目のオカレンスで指定されたパターンと一致する文字列が、replace_stringで指定された文字列に置き換えられることを示します。 このパラメーターを0に設定すると、指定したパターンに一致するすべての部分文字列が置き換えられます。 このパラメーターが別のデータ型であるか、0未満の場合、エラーが返されます。 デフォルト値:0
戻り値
STRING型の値が返されます。 戻り値は、次のルールによって異なります。
参照グループが存在しない場合、返される結果は未定義です。
replace_stringの値がnullで、部分文字列が指定のパターンと一致する場合、nullが返されます。
replace_stringの値がnullで、指定されたパターンと一致する部分文字列がない場合、元の文字列が返されます。
source、pattern、またはoccurrenceの値がnullの場合、nullが返されます。
例
例1: 指定したパターンに基づいて文字列を置き換えます。 サンプル文:
-- The return value is Abcd. select regexp_replace("abcd", "a", "A", 0); -- The return value is bcd. select regexp_replace("abcd", "a", "", 0); -- The return value is 19700101. select regexp_replace("1970-01-01", "-", "", 0); -- The return value is abc. select regexp_replace("a1b2c3", "[0-9]", "", 0); -- The return value a1b2c. select regexp_replace("a1b2c3", "[0-9]", "", 3);例2:
(\\1)\\2-\\3を使用して、123.456.7890文字列内で一致するすべての部分文字列([[:digit:]]{3})\\.([[:digit:]]{3})を置き換えます。 例:-- The return value is (123)456-7890. select regexp_replace('123.456.7890', '([[:digit:]]{3})\\.([[:digit:]]{3})\\.([[:digit:]]{4})', '(\\1)\\2-\\3', 0);例3:
abcd文字列の指定されたパターンと一致する部分文字列を置き換えます。 サンプル文:-- The return value is a b c d. select regexp_replace('abcd', '(.)', '\\1 ', 0); -- The return value is a bcd. select regexp_replace('abcd', '(.)', '\\1 ', 1); -- The return value is d. select regexp_replace("abcd", "(.*)(.)$", "\\2", 0);例4: url_setテーブルのURL列のデータは
www.simple@xxx.com形式で、各行のwww.simple@xxx.comのxxxが異なります。www以降のすべての文字をURL列のデータの文字列に置き換えます。 例:-- The return value is wwwtest. select regexp_replace(url,'(www)(.*)','wwwtest',0) from url_set;例5: 入力パラメータがnullに設定されています。 例:
-- The return value is null. select regexp_replace('abcd', '(.)', null, 0);例6: 参照するグループが存在しません。 サンプル文:
-- Only one group is defined in the pattern, and the referenced group does not exist. -- We recommend that you do not use this function in this way. The result of referencing a nonexistent group is not defined. regexp_replace("abcd", "(.)", "\\2", 0) = "" or "abcd" -- The referenced group is defined in the pattern. Therefore, "\1" references a nonexistent group. -- We recommend that you do not use this function in this way. The result of referencing a nonexistent group is not defined. regexp_replace("abcd", "a", "\\1", 0) = "bcd" or "abcd"
関連関数
REGEXP_REPLACEは文字列関数です。 文字列検索と変換に関連する関数の詳細については、文字列関数.