Düzenli ifadeler rastgele gürültüye benzeme konusunda kötü bir üne sahiptir. ^[\w.-]+@[\w-]+\.\w{2,}$ gibi bir kalıp, klavyenin üzerinden bir kedinin yürümüş gibi görünebilir. Ancak şifreli sözdiziminin ardında son derece zarif bir fikir yatar: metindeki kalıpları tanımlamak için özlü bir dil.
Form girdilerini doğruluyor, günlük dosyalarını arıyor, verileri temizliyor veya bir kod tabanı genelinde bul-değiştir yapıyor olun, regex bir geliştiricinin araç kutusundaki en çok yönlü araçlardan biridir. Ve gerçek değer elde etmek için her belirsiz özelliği ezberlemeniz gerekmez. Bir avuç yapı taşı pratik kullanım durumlarının büyük çoğunluğunu kapsar.
Regex aslında ne yapar
Düzenli ifade (regex veya regexp), bir dizi stringi tanımlayan bir kalıptır. Programlama diliniz, metin editörünüz veya komut satırı aracınızdaki bir arama motoruna verirsiniz ve eşleşen her stringi bulur.
Bunu gelişmiş bir arama sorgusu olarak düşünün:
- Normal arama: tam olarak "error" kelimesini bul
- Regex arama: IP adresi, tarih, e-posta adresi veya tanımlayabileceğiniz herhangi bir yapıya benzeyen her şeyi bul
Regex, 1956'da matematikçi Stephen Kleene tarafından icat edilmiş ve 1960'larda Unix metin editörleri aracılığıyla bilgisayar dünyasına girmiştir. Bugün neredeyse her programlama dili ve metin editöründe desteklenmektedir.
Yapı taşları
Literal karakterler
En basit regex düz metindir. hello kalıbı, göründüğü her yerde "hello" stringiyle eşleşir. Karmaşık bir şey yok.
Nokta (.) — herhangi bir karakter
Nokta, yeni satır hariç herhangi bir tek karakterle eşleşir.
h.t— "hat", "hit", "hot", "h3t" ve hatta "h t" ile eşleşir
Karakter sınıfları ([])
Köşeli parantezler bir konumdaki izin verilen karakter kümesini tanımlar.
[aeiou]— herhangi bir sesli harf[0-9]— herhangi bir rakam[A-Za-z]— herhangi bir harf[^0-9]— rakam OLMAYAN herhangi bir karakter (köşeli parantez içindeki^"değil" anlamına gelir)
Kısaltma sınıfları
| Kısaltma | Anlamı | Eşdeğeri |
|---|---|---|
\d |
Herhangi bir rakam | [0-9] |
\w |
Kelime karakteri | [A-Za-z0-9_] |
\s |
Boşluk | [ \t\n\r] |
\D |
Rakam değil | [^0-9] |
\W |
Kelime karakteri değil | [^A-Za-z0-9_] |
\S |
Boşluk değil | [^ \t\n\r] |
Niceleyiciler — kaç tane
Niceleyiciler, önceki elemanın kaç kez görünmesi gerektiğini kontrol eder.
| Sembol | Anlamı | Örnek | Eşleşmeler |
|---|---|---|---|
* |
Sıfır veya daha fazla | ab*c |
"ac", "abc", "abbc" |
+ |
Bir veya daha fazla | ab+c |
"abc", "abbc" ("ac" değil) |
? |
Sıfır veya bir | colou?r |
"color" ve "colour" |
{3} |
Tam olarak 3 | \d{3} |
"123", "456" |
{2,4} |
2 ile 4 arası | \d{2,4} |
"12", "123", "1234" |
Çapalar — konum
^— stringin başı (veyambayrağıyla satırın başı)$— stringin sonu (veya satırın sonu)\b— kelime sınırı
^\d{4}$ kalıbı "2026" gibi tam olarak dört rakamdan oluşan bir stringle eşleşir, ancak "abc2026" veya "2026xyz" ile eşleşmez.
Gruplar ve alternatif
(abc)— "abc"yi bir grup olarak yakalara|b— "a" veya "b" ile eşleşir(cat|dog)— "cat" veya "dog" ile eşleşir
Gruplar ayrıca niceleyicileri dizilere uygulamanıza olanak tanır: (ha)+ — "ha", "haha", "hahaha" ile eşleşir.
Yaygın pratik kalıplar
E-posta doğrulama (temel)
^[\w.-]+@[\w-]+\.\w{2,}$
Bu, user@example.com, first.last@company.co.uk (kısmen) ile eşleşir ve @ veya alan adı olmayan stringleri reddeder.
Önemli: E-posta adreslerini regex ile mükemmel şekilde doğrulamak herkesin bildiği üzere zordur — tam RFC 5322 spesifikasyonu son derece karmaşıktır. Üretim sistemleri için format kontrolü amacıyla basit bir regex kullanın ve ardından onay e-postası göndererek adresi doğrulayın.
Telefon numarası eşleştirme
\+?\d{1,3}[-.\s]?\(?\d{1,4}\)?[-.\s]?\d{3,4}[-.\s]?\d{3,4}
Bu, +1 555 123 4567, 555-123-4567 ve (555) 123-4567 gibi formatları işler.
URL eşleştirme
https?://[\w.-]+(/[\w./?&=-]*)?
https://example.com, http://example.com/path?q=hello ile eşleşir.
Tarih eşleştirme (YYYY-MM-DD)
\d{4}-\d{2}-\d{2}
2026-03-29, 1999-12-31 ile eşleşir. Not: bu yalnızca formatı kontrol eder, geçerliliği değil — 9999-99-99 ile de eşleşir.
Davranışı değiştiren bayraklar
Çoğu regex motoru, kalıbın nasıl uygulanacağını değiştiren bayrakları destekler:
| Bayrak | İsim | Etki |
|---|---|---|
g |
Global | Sadece ilkini değil, tüm eşleşmeleri bul |
i |
Büyük/küçük harf duyarsız | hello, "Hello", "HELLO" vb. ile eşleşir |
m |
Çok satırlı | ^ ve $ her satırın başı/sonuyla eşleşir |
s |
Dotall | . yeni satır karakterleriyle de eşleşir |
JavaScript'te bayraklar kapanış eğik çizgisinden sonra eklenir: /hello/gi. Python'da argüman olarak geçirilir: re.findall(r"hello", text, re.IGNORECASE).
Regex'in aşırı kaçtığı durumlar
Regex güçlüdür, ama her zaman doğru araç değildir:
- HTML veya XML ayrıştırma. Uygun bir DOM ayrıştırıcı kullanın. Regex iç içe etiketleri güvenilir şekilde işleyemez.
- JSON ayrıştırma.
JSON.parse()veya eşdeğerini kullanın. Regex uç durumlarda bozulacaktır. - Karmaşık doğrulama. Kalıbınız birden fazla satıra yayılıyorsa ve okunması beş dakika sürüyorsa, bunun yerine prosedürel doğrulama kodu yazmayı düşünün.
- Basit string işlemleri. Sadece
startsWith(),includes()veyasplit()yetiyorsa, düz string yöntemleri daha açık ve hızlıdır.
Yaygın tuzaklar
- Özel karakterleri kaçırmayı unutmak. Nokta
.herhangi bir karakterle eşleşir. Gerçek bir noktayla eşleşmek için\.kullanın. Aynısı(,),[,],+,*,?,{,},^,$,|ve\için de geçerlidir. - Açgözlü ve tembel eşleşme. Varsayılan olarak
.*açgözlüdür — mümkün olduğunca çok eşleşir. Tembel yapmak için?ekleyin:.*?mümkün olduğunca az eşleşir. Bu, sınırlayıcılar arasındaki içeriği çıkarırken önemlidir. - Felakete yol açan geri izleme.
(a+)+gibi iç içe niceleyiciler, belirli girdilerde motorun üstel sayıda yol denemesine neden olarak programınızı dondurabilir. Örtüşen kalıplarda iç içe tekrardan kaçının. - Çapaları unutmak.
^ve$olmadan kalıbınız alt stringlerle eşleşir.\d{3}, "abc12345" içindeki "123" ile eşleşir. Tam eşleşme istiyorsanız^\d{3}$kullanın.
Daha fazlası
Regex öğrenmenin en iyi yolu deney yapmaktır. Bir kalıp yazın, test metni yapıştırın ve neyin eşleştiğini görün. Her parçanın nasıl çalıştığını anlayana kadar ayarlayın ve tekrarlayın.
- Regex Kalıplarını Test Etme — örneklerle etkileşimli eğitim
- Regex Test Aracı — kalıbınızı ve test verilerinizi yapıştırın, eşleşmeleri gerçek zamanlı olarak vurgulanmış görün
