Funktionen regexp_extract

Gäller för:markerad ja Databricks SQL markerad ja Databricks Runtime

Extraherar den första strängen str i regexp som matchar uttrycket och motsvarar regex gruppindexet.

Syntax

regexp_extract(str, regexp [, idx] )

Argument

  • str: Ett STRING uttryck som ska matchas.
  • regexp: Ett STRING uttryck med ett matchande mönster.
  • idx: Ett valfritt integralnummeruttryck större eller lika med 0 med standardvärdet 1.

Returer

En STRING.

Om str, regexp, eller idx är NULL, blir NULLresultatet . Om regexp inte matchar någon del av strär resultatet en tom sträng. Om det övergripande mönstret matchar men gruppen som anges av idx inte deltar i matchningen är resultatet en tom sträng.

Strängen regexp måste vara ett Java reguljärt uttryck. Se Java regex-mönster för syntaxen som stöds.

När du använder literaler använder du raw-literal (r prefix) för att undvika förbearbetning av escape-tecken.

regexp kan innehålla flera grupper. Insamlingsgrupper definieras genom att en del av mönstret omsluts i parenteser (...). idx anger vilken regexgrupp som ska extraheras. Ett idx av 0 innebär att matcha hela reguljära uttryck. Standardvärdet idx för är 1, vilket innebär att den första avbildningsgruppen returneras när idx den utelämnas.

Om idx är större än antalet avbildningsgrupper som definierats i regexpgenererar Databricks ett fel.

Endast den första matchningen av regexp i str beaktas. Om du vill extrahera alla matchningar använder du regexp_extract_all.

Vanliga felvillkor

Exempel

Extrahera specifika insamlingsgrupper

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

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

Använd idx 0 för att returnera hela matchningen

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

Standard-idx är 1

När idx utelämnas returneras den första avbildningsgruppen.

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

Ingen matchning returnerar en tom sträng

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

NULL-indata returnerar NULL

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

Använd råa strängliteraler för att undvika dubbel utrymning

I en vanlig SQL-sträng måste omvänt snedstreck fördubblas (\\d till medelvärde \d). Använd prefixet r för råa strängliteraler för att skriva mönster mer naturligt.

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

Extrahera en domän från en URL

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

Extrahera en komponent från en datumsträng

> 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

Valfri avbildningsgrupp som inte deltar i matchningen

När en grupp är valfri och inte matchar returneras en tom sträng för den gruppen.

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

Ogiltigt regexmönster

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