Funkcja regexp_extract

Dotyczy:zaznacz pole wyboru oznaczone jako tak Databricks SQL zaznacz pole wyboru oznaczone jako tak Databricks Runtime

Wyodrębnia pierwszy ciąg, str który odpowiada wyrażeniu regexp i odpowiada indeksowi regex grupy.

Składnia

regexp_extract(str, regexp [, idx] )

Argumenty

  • str STRING: Wyrażenie, które ma być dopasowane.
  • regexp STRING: wyrażenie z pasującym wzorcem.
  • idx: opcjonalne wyrażenie liczby całkowitej większej lub równej 0 z wartością domyślną 1.

Zwraca

Klasa STRING.

Jeśli strelement , regexplub idx ma NULLwartość , wynik to NULL. Jeśli regexp nie pasuje do żadnej części elementu str, wynik jest pustym ciągiem. Jeśli ogólny wzorzec pasuje, ale grupa określona przez idx nie uczestniczy w dopasowaniu, wynik jest pustym ciągiem.

Ciąg regexp musi być wyrażeniem regularnym Java. Zobacz Java wzorce wyrażeń regularnych aby uzyskać obsługiwaną składnię.

W przypadku używania literałów użyj raw-literal (r prefiksu), aby uniknąć wstępnego przetwarzania znaków ucieczki.

regexp może zawierać wiele grup. Grupy przechwytywania są definiowane przez otaczanie części wzorca w nawiasach (...). idx wskazuje, która grupa wyrażeń regularnych ma być wyodrębniana. Wartość idx 0 oznacza dopasowanie całego wyrażenia regularnego. Wartość domyślna to idx 1, co oznacza, że pierwsza grupa przechwytywania jest zwracana, gdy idx zostanie pominięta.

Jeśli idx wartość jest większa niż liczba grup przechwytywania zdefiniowanych w usłudze regexp, usługa Databricks zgłasza błąd.

Uwzględniane jest tylko pierwsze dopasowanie elementu regexp in str . Aby wyodrębnić wszystkie dopasowania, użyj regexp_extract_all.

Typowe warunki błędów

Przykłady

Wyodrębnianie określonych grup przechwytywania

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

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

Użyj identyfikatora idx 0, aby zwrócić całe dopasowanie

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

Domyślny identyfikator to 1

Gdy idx zostanie pominięta, zostanie zwrócona pierwsza grupa przechwytywania.

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

Brak dopasowania zwraca pusty ciąg

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

Dane wejściowe NULL zwracają wartość NULL

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

Użyj nieprzetworzonych literałów ciągów, aby uniknąć podwójnego ucieczki

W zwykłym ciągu SQL ukośniki odwrotne muszą być dwukrotnie (\\d aby oznaczać \d). Użyj prefiksu r dla nieprzetworzonych literałów ciągów, aby pisać wzorce bardziej naturalnie.

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

Wyodrębnianie domeny z adresu URL

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

Wyodrębnianie składnika z ciągu daty

> 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

Opcjonalna grupa przechwytywania, która nie uczestniczy w dopasowaniu

Gdy grupa jest opcjonalna i nie jest zgodna, dla tej grupy jest zwracany pusty ciąg.

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

Nieprawidłowy wzorzec wyrażenia regularnego

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