regexp_extract işlevi

Şunlar için geçerlidir:onay işareti evet olarak işaretlenmiş Databricks SQL onay işareti evet olarak işaretlenmiş Databricks Runtime

içindeki ifadeyle eşleşen ilk dizeyi strregexp ayıklar ve grup dizinine regex karşılık gelir.

Söz dizimi

regexp_extract(str, regexp [, idx] )

Bağımsız değişkenler

  • str STRING: Eşleştirilecek ifade.
  • regexp STRING: Eşleşen desene sahip bir ifade.
  • idx: Varsayılan 1 ile 0'a eşit veya daha büyük isteğe bağlı bir tam sayı ifadesi.

Döndürülenler

Bir STRING.

, strregexpveya idx iseNULL, sonuç olurNULL. regexp herhangi bir bölümüyle streşleşmiyorsa, sonuç boş bir dizedir. Genel desen eşleşiyorsa ancak tarafından idx belirtilen grup eşleşmeye katılmıyorsa, sonuç boş bir dize olur.

Dize normal regexp bir ifade olmalıdır. Desteklenen söz dizimi için bkz. Normal ifadeler .

Değişmez değerleri kullanırken kaçış karakteri ön işlemesini önlemek için ( ön ek)raw-literalr .

regexp birden çok grup içerebilir. Yakalama grupları, desenin bir kısmını parantez (...)içine alarak tanımlanır. idx ayıklanması gereken regex grubunu gösterir. 0'lardan biri idx , normal ifadenin tamamıyla eşleşme anlamına gelir. varsayılan değeri idx 1'dir, yani atlandığında idx ilk yakalama grubu döndürülür.

içinde tanımlanan idxyakalama gruplarının sayısından büyükse regexp Databricks bir hata oluşturur.

yalnızca 'ın regexp ilk eşleşmesi str dikkate alınır. Tüm eşleşmeleri ayıklamak için regexp_extract_all kullanın.

Yaygın hata koşulları

Örnekler

Belirli yakalama gruplarını ayıklama

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

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

Eşleşmenin tamamını döndürmek için idx 0 kullanın

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

Varsayılan idx 1'dir

Atlandığında idx , ilk yakalama grubu döndürülür.

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

Eşleşme yok boş dize döndürüyor

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

NULL girişi NULL döndürür

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

Çift kaçışı önlemek için ham dize değişmez değerlerini kullanma

Normal bir SQL dizesinde ters eğik çizgilerin iki katına (\\d ortalamasına \d) sahip olması gerekir. Desenleri r daha doğal yazmak için ham dize değişmez değerleri için ön eki kullanın.

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

URL'den etki alanı ayıklama

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

Bir tarih dizesinden bileşen ayıklama

> 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

Eşleşmeye katılmayan isteğe bağlı yakalama grubu

Bir grup isteğe bağlı olduğunda ve eşleşmediğinde, bu grup için boş bir dize döndürülür.

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

Geçersiz regex deseni

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