Normal ifadeler

Şunun için geçerlidir:Evet olarak işaretlendi Databricks SQL Evet olarak işaretlendi Databricks Runtime

Normal ifade (regex), bir dizi dizeyi açıklayan bir desendir. Çeşitli Azure Databricks SQL işlevleri ve işleçleri metni eşleştirmek, bulmak, saymak, ayıklamak, değiştirmek veya bölmek için normal bir ifade alır:

  • rlike işleci ve regexp işleci: Dizenin bir desenle eşleşip eşleşmediğini test edin.
  • regexp_like işlevi: Dizenin bir desenle eşleşip eşleşmediğini test edin.
  • regexp_count işlevi: Desenin kaç kez eşleştiklerini sayar.
  • regexp_instr işlevi: İlk eşleşmenin konumunu döndürür.
  • regexp_substr işlevi: eşleşen ilk alt dizeyi döndürür.
  • regexp_extract ve regexp_extract_all işlevleri: İlk eşleşmeden veya tüm eşleşmelerden bir yakalama grubu döndürür.
  • regexp_replace işlevi: eşleşmeleri yeni bir dizeyle değiştirin.
  • split işlevi: Bir dizeyi bir desenin eşleşmeleri etrafında bölün.

like ve i likee işleçleri normal ifadeler kullanmaz. ve %tabanlı _ daha basit bir desen dili kullanırlar.

Regex altyapısı

Azure Databricks, Java java.util.regex altyapısını kullanarak normal ifadeleri değerlendirir. Desenler, Perl stili normal ifadelerle geniş ölçüde uyumlu olan ancak bazı ayrıntılarda farklılık gösteren normal ifade söz diziminde Java izlemelidir. Tam ve yetkili başvuru için Java Pattern sınıfı belgelerine bakın.

Aşağıdaki bölümlerde en yaygın kullanılan yapılar açıklanmaktadır.

Karakter sınıfları

İnşa etmek Eşleşmeler
. Çizgi sonlandırıcısı dışında herhangi bir tek karakter (bayrak ayarlanmadığı sürece s ).
[abc] Listelenen karakterlerden herhangi biri: a, bveya c.
[^abc] olmayan herhangi bir tek karaktera, bveya c.
[a-z] ile zaralığındaki a herhangi bir karakter.
\d, \D Bir basamak ([0-9]); \D basamak olmayan herhangi bir rakamla eşleşir.
\w, \W Sözcük karakteri ([a-zA-Z_0-9]); \W sözcük olmayan herhangi bir karakterle eşleşir.
\s, \S Boşluk karakteri; \S boşluk olmayan herhangi bir karakterle eşleşir.

Tutturucular ve sınırlar

İnşa etmek Eşleşmeler
^ Girişin başlangıcı (veya bayrağı olan bir satırın m ).
$ Girişin sonu (veya bayrağı olan bir satırın m ).
\b, \B Sözcük sınırı; \B sözcük olmayan bir sınırla eşleşir.

Miktar Niceleyiciler

Niceleyiciler, önceki öğenin kaç kez eşleşmesi gerektiğini belirtir. Varsayılan olarak, niceleyiciler doyumsuz olur ve mümkün olduğunca eşlenir. Niceleyiciyi isteksiz hale getirmek için ekleyin ? (mümkün olduğunca az eşleştirin), örneğin.*?.

İnşa etmek Önceki öğeyle eşleşir...
* Sıfır veya daha fazla kez.
+ Bir veya daha fazla kez.
? Sıfır veya bir kez.
{n} Tam olarak n zaman.
{n,} En azından n bir kere.
{n,m} m Ve zaman arasından.

Gruplar ve değişim

İnşa etmek Description
(...) Yakalama grubu. regexp_extract ile grup dizinini kullanın.
(?:...) Yakalama olmayan bir grup. Eşleşmeyi yakalamadan gruplar.
a\|b Değişim. a veya bile eşleşir.

Satır içi bayraklar

Tüm desenin eşleşme biçimini değiştirmek için desenin başlangıcına bir bayrak yerleştirin.

Flag Etkisi
(?i) Büyük/küçük harfe duyarsız eşleştirme.
(?s) Noktalı mod. . satır sonlandırıcılarıyla eşleşir.
(?m) Çok satırlı mod. ^ ve $ satır sonlarında eşleştirin.
(?x) Açıklamalar modu. Desendeki boş alanı yoksayar.

Örneğin, büyük(?i)ste(v\|ph)en/küçük harfe bakılmaksızın , stevenve STEPHEN ile eşleşirSteven.

Kaçış ve dize değişmez değerleri

Aynı zamanda bir regex meta karakter (, , , ([veya \gibi.*) olan bir karakterle eşleştirmek için önüne ters eğik çizgi koyun. Örneğin, \. değişmez değer dönemiyle eşleşir ve \\ değişmez değer ters eğik çizgiyle eşleşir.

Ters eğik çizgi aynı zamanda normal SQL dize değişmez değerlerindeki kaçış karakteri olduğundan, regex altyapısına geçirmeyi planladığınız her ters eğik çizgiyi ikiye katlamalısınız. Örneğin, deseni \d+ bir işleve geçirmek için normal bir dize değişmez değeri olarak '\\d+' yazın.

Bu çift kaçışı önlemek için kaçış karakteri ön işlemini devre dışı bırakan birraw-literal (r ön ek) kullanın. Ham sabit değerde deseni tam olarak regex altyapısının beklediği şekilde yazın:

-- Regular string literal: backslashes must be doubled.
> SELECT regexp_substr('item 42 in stock', '\\d+');
 42

-- Raw literal: write the pattern as-is.
> SELECT regexp_substr('item 42 in stock', r'\d+');
 42

Ortak desenler

Aşağıdaki desenler sık kullanılan görevleri kapsar. Ters eğik çizgilerin regex altyapısına değişmeden geçmesi için ham değişmez değerler olarak yazılırlar. E-posta, URL ve IP desenleri, katı doğrulayıcılar değil, kasıtlı olarak basit çizimlerdir.

Goal Pattern
İsteğe bağlı olarak imzalı tamsayı r'-?\d+'
Ondalık sayı r'-?\d+(\.\d+)?'
Bir sözcük r'\w+'
Yalnızca tüm sözcük cat r'\bcat\b'
E-posta adresi (basit) r'[\w.%+-]+@[\w.-]+\.\w{2,}'
URL'de konak oluşturma r'https?://([^/]+)'
IPv4 adresi (0-255'i denetlemez) r'\d{1,3}(\.\d{1,3}){3}'
ISO tarihi (YYYY-MM-DD) r'\d{4}-\d{2}-\d{2}'
Baştaki ve sondaki boşluk r'^\s+\|\s+$'
ABD telefon numarası (basit) r'\d{3}-\d{3}-\d{4}'

Word sınırlar (\b) alt dize yerine bir word tamamıyla eşleşiyor:

-- 'cat' as a standalone word
> SELECT 'the cat sat on the mat' rlike r'\bcat\b';
 true

-- 'cat' only as part of a larger word
> SELECT 'category' rlike r'\bcat\b';
 false

Sipariş kimliği gibi yapılandırılmış bir belirteci ayıklamak için değişmez değer ön ekini niceleyici ile birleştirin:

> SELECT regexp_substr('Ref: ORD-12345 shipped on 2024-03-15', r'ORD-\d+');
 ORD-12345

Doğru işlevi seçme

Hedefinizle eşleşen işlevi seçmek için bu tabloyu kullanın.

İstediğiniz... Use
Bir dizenin eşleşip eşleşmediğini test edin. rlike / Regexp / regexp_like
İlk eşleşen alt dizeyi döndürür. regexp_substr
Yakalama grubu döndür. regexp_extract
Tüm eşleşmeleri döndürür. regexp_extract_all
Eşleşmenin konumunu döndürür. regexp_instr
Eşleşme sayısını sayma. regexp_count
Eşleşmeleri diğer metinlerle değiştirin. regexp_replace
Bir dizeyi eşleşmeler etrafında bölün. split
Basit _ / % bir deseni eşleştirin. Gibi / Ilike