Condividi tramite


Funzione regexp_extract

Si applica a:segno di spunta sì Databricks SQL segno di spunta sì Databricks Runtime

Estrae la prima stringa in str che corrisponde all'espressione regexp e corrisponde all'indice del gruppo regex.

Sintassi

regexp_extract(str, regexp [, idx] )

Argomenti

  • str STRING: espressione di cui trovare la corrispondenza.
  • regexp STRING: espressione con un criterio di ricerca corrispondente.
  • idx: espressione numerica integrale facoltativa maggiore o uguale a 0 con il valore predefinito 1.

Valori restituiti

Un oggetto STRING.

Se str, regexpo idx è NULL, il risultato è NULL. Se regexp non corrisponde ad alcuna parte di str, il risultato è una stringa vuota. Se il criterio complessivo corrisponde ma il gruppo specificato da idx non partecipa alla corrispondenza, il risultato è una stringa vuota.

La stringa regexp deve essere un'espressione regolare Java. Per la sintassi supportata, vedere Java pattern regex.

Quando si usano valori letterali, usare raw-literal (r prefisso) per evitare la pre-elaborazione dei caratteri di escape.

regexp può contenere più gruppi. I gruppi di acquisizione vengono definiti racchiudendo parte del modello tra parentesi (...). idx indica il gruppo regex da estrarre. Un idx valore pari a 0 indica la corrispondenza dell'intera espressione regolare. Il valore predefinito di idx è 1, ovvero il primo gruppo di acquisizione viene restituito quando idx viene omesso.

Se idx è maggiore del numero di gruppi di acquisizione definiti in regexp, Databricks genera un errore.

Viene considerata solo la prima corrispondenza di regexp in str . Per estrarre tutte le corrispondenze, usare regexp_extract_all.

Condizioni di errore comuni

Esempi

Estrarre gruppi di acquisizione specifici

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

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

Usare idx 0 per restituire l'intera corrispondenza

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

Idx predefinito è 1

Quando idx viene omesso, viene restituito il primo gruppo di acquisizione.

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

Nessuna corrispondenza restituisce una stringa vuota

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

L'input NULL restituisce NULL

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

Usare valori letterali stringa non elaborati per evitare l'escape doppio

In una stringa SQL normale, le barre rovesciate devono essere raddoppiate (\\d per indicare \d). Usare il r prefisso per i valori letterali stringa non elaborati per scrivere modelli in modo più naturale.

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

Estrarre un dominio da un URL

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

Estrarre un componente da una stringa di data

> 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

Gruppo di acquisizione facoltativo che non partecipa alla corrispondenza

Quando un gruppo è facoltativo e non corrisponde, viene restituita una stringa vuota per tale gruppo.

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

Modello regex non valido

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