適用対象:
Databricks SQL
Databricks Runtime
str 式に一致し、regexp グループ インデックスに対応する、regex 内の最初の文字列を抽出します。
構文
regexp_extract(str, regexp [, idx] )
引数
-
str: 照合するSTRING式。 -
regexp: パターンが一致するSTRING式。 -
idx: 0 以上の整数式 (省略可能、既定値は 1)。
返品
STRING です。
str、regexp、またはidxがNULL場合、結果はNULL。
regexpがstrのどの部分にも一致しない場合、結果は空の文字列になります。
パターン全体が一致するが、 idx で指定されたグループが一致に関与しない場合、結果は空の文字列になります。
regexp 文字列は、Java正規表現である必要があります。 サポートされている構文についてはJava正規表現パターンを参照してください。
リテラルを使用する場合は、エスケープ文字の前処理を回避するために raw-literal (r プレフィックス) を使います。
regexp には、複数のグループを含めることができます。 キャプチャ グループは、パターンの一部をかっこで囲んで定義 (...)。
idx は抽出する正規表現グループを示します。
idx が 0 の場合、正規表現全体に一致することを意味します。
idxの既定値は 1 です。つまり、idxを省略すると、最初のキャプチャ グループが返されます。
idxがregexpで定義されているキャプチャ グループの数を超える場合、Databricks はエラーを発生させます。
regexpのstrの最初の一致のみが考慮されます。 すべての一致を抽出するには、 regexp_extract_allを使用します。
一般的なエラー状態
例
特定のキャプチャ グループを抽出する
> SELECT regexp_extract('100-200', '(\\d+)-(\\d+)', 1);
100
> SELECT regexp_extract('100-200', '(\\d+)-(\\d+)', 2);
200
idx 0 を使用して一致全体を返す
> SELECT regexp_extract('Order: 100-200', '(\\d+)-(\\d+)', 0);
100-200
既定の idx は 1 です
idxを省略すると、最初のキャプチャ グループが返されます。
> SELECT regexp_extract('abc123def', '([a-z]+)(\\d+)');
abc
一致しない場合、空の文字列が返されます
> SELECT regexp_extract('hello world', '(\\d+)', 1);
NULL 入力から NULL が返される
> SELECT regexp_extract(NULL, '(\\d+)', 1);
NULL
二重エスケープを回避するために生の文字列リテラルを使用する
通常の SQL 文字列では、円記号を 2 倍にする必要があります (\\d\dを意味します)。 パターンをより自然に書き込むには、生の文字列リテラルに r プレフィックスを使用します。
> SELECT regexp_extract('abc123', r'(\d+)', 1);
123
URL からドメインを抽出する
> SELECT regexp_extract('https://www.databricks.com/product', r'https?://([^/]+)', 1);
www.databricks.com
日付文字列からコンポーネントを抽出する
> SELECT regexp_extract('Event on 2024-03-15', r'(\d{4})-(\d{2})-(\d{2})', 0);
2024-03-15
> SELECT regexp_extract('Event on 2024-03-15', r'(\d{4})-(\d{2})-(\d{2})', 2);
03
マッチに参加しない省略可能なキャプチャ グループ
グループが省略可能で、一致しない場合は、そのグループの空の文字列が返されます。
> SELECT regexp_extract('ac', r'(a)(b)?(c)', 2);
正規表現パターンが無効です
> SELECT regexp_extract('abc', '[invalid', 0);
Error: INVALID_PARAMETER_VALUE.PATTERN