Ana içeriğe geç
Kesit SQL
Orta · Fonksiyonlar

Desen eşleme: LIKE'tan düzenli ifadelere (REGEX)

REGEXP_LIKE, REGEXP_REPLACE, REGEXP_SUBSTR ve SQL türleri arası farklar.

Uygulamada aç, 6 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

LIKE yetmediğinde

LIKE yalnızca iki joker bilir: % ve _. “İçinde rakam geçen e-postalar”, “birden fazla boşluk”, “@ işaretinden sonraki kısım” gibi işler için düzenli ifadeler (regular expressions, regex) kullanılır.

DesenAnlamıÖrnek
^ / $Metnin başı / sonu^A: A ile başlar
.Herhangi bir karaktera.c: abc, a1c
[abc], [0-9]Kümeden bir karakter[0-9]: bir rakam
[^0-9]Küme dışından bir karakterrakam olmayan
* + ?0 veya daha çok / 1 veya daha çok / 0 ya da 1[0-9]+: bir veya daha çok rakam
{n}, {n,m}Tam n kez / n ile m arası[0-9]{4}: 4 rakam
a|ba veya bgmail|hotmail
\.Özel karakterin kendisi\.com$

SQL türlerine göre regex

SQL türüEşleşiyor mu?DeğiştirParça al
SQL Server 2025REGEXP_LIKE(s, p)REGEXP_REPLACEREGEXP_SUBSTR
PostgreSQLs ~ p, büyük/küçük harf duyarsız: s ~* pregexp_replace(s, p, r, 'g')regexp_substr (15+)
MySQL 8s REGEXP p, REGEXP_LIKEREGEXP_REPLACEREGEXP_SUBSTR
OracleREGEXP_LIKE(s, p) (yalnızca WHERE içinde)REGEXP_REPLACEREGEXP_SUBSTR
SQLites REGEXP p (eklenti gerekir)Yerleşik değil
SQL Server'ın eski sürümleriREGEXP fonksiyonları SQL Server 2025 ile geldi. Daha eski sürümlerde LIKE '%[0-9]%' ve PATINDEX ile idare edilir.

Deseni sağlayan satırları bulmak

SELECT customer_id, email
FROM customers
WHERE REGEXP_LIKE(email, '^[a-z]+\.[a-z]+@gmail\.com$');
MySQL'de çift ters bölüMySQL metin sabitlerinde \ kaçış karakteridir; desendeki \. için '\\.' yazılır. Bunun yerine [.] yazmak her SQL türünde çalışır.

Değiştirmek

Ad soyad alanındaki fazladan boşlukları teke indirelim. PostgreSQL'de 'g' bayrağı yazılmazsa yalnızca ilk eşleşme değişir; diğer SQL türleri varsayılan olarak hepsini değiştirir.

SELECT id,
       full_name,
       TRIM(REGEXP_REPLACE(full_name, ' +', ' ')) AS temiz_ad
FROM raw_signups;

Parça almak

SELECT REGEXP_SUBSTR(email, '[^@]+$') AS alan_adi,
       COUNT(*) AS musteri
FROM customers
WHERE email IS NOT NULL
GROUP BY REGEXP_SUBSTR(email, '[^@]+$');
Regex pahalıdırRegex koşulları indeks kullanamaz ve her satırda çalışır. Büyük tablolarda önce basit bir filtreyle (tarih, durum) satır sayısını azalt.
Alıştırmalara geç (6)