regexp_extract-functie

Van toepassing op:vinkje als ja aan Databricks SQL vinkje als ja aan Databricks Runtime

Extraheert de eerste tekenreeks in str die overeenkomt met de regexp expressie en komt overeen met de regex groepsindex.

Syntaxis

regexp_extract(str, regexp [, idx] )

Argumenten

  • str: Een STRING expressie die moet worden vergeleken.
  • regexp: Een STRING expressie met een overeenkomend patroon.
  • idx: Een optionele integrale getalexpressie groter of gelijk aan 0 met standaard 1.

Retouren

A STRING.

Als str, regexpof idx is NULL, is het resultaat NULL. Als regexp dit niet overeenkomt met een deel van str, is het resultaat een lege tekenreeks. Als het algemene patroon overeenkomt, maar de groep die is opgegeven, idx niet aan de overeenkomst deelneemt, is het resultaat een lege tekenreeks.

De tekenreeks regexp moet een Java reguliere expressie zijn. Zie Java regex-patronen voor de ondersteunde syntaxis.

Wanneer u letterlijke gegevens gebruikt, gebruikt raw-literal u (r voorvoegsel) om voorverwerking van escape-tekens te voorkomen.

regexp kan meerdere groepen bevatten. Capture-groepen worden gedefinieerd door een deel van het patroon tussen haakjes (...)te sluiten. idx geeft aan welke regex-groep moet worden geëxtraheerd. Een idx van 0 betekent dat deze overeenkomt met de volledige reguliere expressie. De standaardwaarde is idx 1, wat betekent dat de eerste capturegroep wordt geretourneerd wanneer idx deze wordt weggelaten.

Als idx het aantal vastgelegde groepen groter is dan het aantal vastgelegde groepen regexp, genereert Databricks een fout.

Alleen de eerste overeenkomst van regexp binnen str wordt overwogen. Als u alle overeenkomsten wilt extraheren, gebruikt u regexp_extract_all.

Algemene foutvoorwaarden

Voorbeelden

Specifieke capturegroepen extraheren

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

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

Gebruik idx 0 om de hele overeenkomst te retourneren

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

Standaard-idx is 1

Wanneer idx dit wordt weggelaten, wordt de eerste capturegroep geretourneerd.

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

Geen overeenkomst retourneert een lege tekenreeks

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

NULL-invoer retourneert NULL

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

Letterlijke tekenreeksen gebruiken om dubbele escape-tekens te voorkomen

In een gewone SQL-tekenreeks moeten backslashes worden verdubbeld (\\d om te betekenen \d). Gebruik het r voorvoegsel voor letterlijke tekenreeksen om natuurlijk patronen te schrijven.

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

Een domein extraheren uit een URL

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

Een onderdeel extraheren uit een datumtekenreeks

> 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

Optionele capture-groep die niet aan de overeenkomst deelneemt

Wanneer een groep optioneel is en niet overeenkomt, wordt een lege tekenreeks geretourneerd voor die groep.

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

Ongeldig regex-patroon

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