regexp_extract fungsi

Berlaku untuk:centang ditandai ya Databricks SQL centang ditandai ya Databricks Runtime

Mengekstrak string pertama dalam str yang cocok dengan ekspresi regexp dan sesuai dengan indeks grup regex.

Sintaks

regexp_extract(str, regexp [, idx] )

Argumen

  • str: Ekspresi STRING yang akan dicocokkan.
  • regexp: Ekspresi STRING dengan pola yang cocok.
  • idx: Ekspresi bilangan integral opsional lebih besar atau sama dengan 0 dengan default 1.

Mengembalikan

STRING.

Jika str, , regexpatau idx adalah NULL, hasilnya adalah NULL. Jika regexp tidak cocok dengan bagian mana pun dari str, hasilnya adalah string kosong. Jika pola keseluruhan cocok tetapi grup yang ditentukan oleh idx tidak berpartisipasi dalam kecocokan, hasilnya adalah string kosong.

String regexp harus berupa ekspresi reguler Java. Lihat pola regex Java untuk sintaks yang didukung.

Saat menggunakan literal, gunakan raw-literal (r awalan) untuk menghindari pra-pemrosesan karakter escape.

regexp mungkin berisi beberapa grup. Grup pengambilan didefinisikan dengan mengapit bagian dari pola dalam tanda kurung (...). idx menunjukkan grup regex mana yang akan diekstrak. idx dari 0 berarti mencocokkan seluruh ekspresi reguler. Nilai idx default adalah 1, yang berarti grup pengambilan pertama dikembalikan saat idx dihilangkan.

Jika idx lebih besar dari jumlah grup pengambilan yang ditentukan dalam regexp, Databricks menimbulkan kesalahan.

Hanya pertandingan regexp pertama dalam yang dipertimbangkan str . Untuk mengekstrak semua kecocokan, gunakan regexp_extract_all.

Kondisi kesalahan umum

Contoh

Mengekstrak grup pengambilan tertentu

> SELECT regexp_extract('100-200', '(\\d+)-(\\d+)', 1);
 100

> SELECT regexp_extract('100-200', '(\\d+)-(\\d+)', 2);
 200

Gunakan idx 0 untuk mengembalikan seluruh kecocokan

> SELECT regexp_extract('Order: 100-200', '(\\d+)-(\\d+)', 0);
 100-200

Idx default adalah 1

Ketika idx dihilangkan, grup pengambilan pertama dikembalikan.

> SELECT regexp_extract('abc123def', '([a-z]+)(\\d+)');
 abc

Tidak ada kecocokan yang mengembalikan string kosong

> SELECT regexp_extract('hello world', '(\\d+)', 1);

Input NULL mengembalikan NULL

> SELECT regexp_extract(NULL, '(\\d+)', 1);
 NULL

Gunakan literal string mentah untuk menghindari pelepasan ganda

Dalam string SQL biasa, garis miring terbalik harus digandakan (\\d rata-rata \d). Gunakan awalan r untuk literal string mentah untuk menulis pola secara lebih alami.

> SELECT regexp_extract('abc123', r'(\d+)', 1);
 123

Mengekstrak domain dari URL

> SELECT regexp_extract('https://www.databricks.com/product', r'https?://([^/]+)', 1);
 www.databricks.com

Mengekstrak komponen dari string tanggal

> 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

Grup pengambilan opsional yang tidak berpartisipasi dalam kecocokan

Saat grup bersifat opsional dan tidak cocok, string kosong dikembalikan untuk grup tersebut.

> SELECT regexp_extract('ac', r'(a)(b)?(c)', 2);

Pola regex tidak valid

> SELECT regexp_extract('abc', '[invalid', 0);
  Error: INVALID_PARAMETER_VALUE.PATTERN