すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:REGEXP_REPLACE

最終更新日:Jan 17, 2025

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で、指定されたパターンと一致する部分文字列がない場合、元の文字列が返されます。

  • sourcepattern、または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は文字列関数です。 文字列検索と変換に関連する関数の詳細については、文字列関数.