regexp_extract 関数

適用対象:「はい」のチェック マーク Databricks SQL 「はい」のチェック マーク Databricks Runtime

str 式に一致し、regexp グループ インデックスに対応する、regex 内の最初の文字列を抽出します。

構文

regexp_extract(str, regexp [, idx] )

引数

  • str: 照合する STRING 式。
  • regexp: パターンが一致する STRING 式。
  • idx: 0 以上の整数式 (省略可能、既定値は 1)。

返品

STRING です。

strregexp、またはidxNULL場合、結果はNULLregexpstrのどの部分にも一致しない場合、結果は空の文字列になります。 パターン全体が一致するが、 idx で指定されたグループが一致に関与しない場合、結果は空の文字列になります。

regexp 文字列は、Java正規表現である必要があります。 サポートされている構文についてはJava正規表現パターンを参照してください。

リテラルを使用する場合は、エスケープ文字の前処理を回避するために raw-literal (r プレフィックス) を使います。

regexp には、複数のグループを含めることができます。 キャプチャ グループは、パターンの一部をかっこで囲んで定義 (...)idx は抽出する正規表現グループを示します。 idx が 0 の場合、正規表現全体に一致することを意味します。 idxの既定値は 1 です。つまり、idxを省略すると、最初のキャプチャ グループが返されます。

idxregexpで定義されているキャプチャ グループの数を超える場合、Databricks はエラーを発生させます。

regexpstrの最初の一致のみが考慮されます。 すべての一致を抽出するには、 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