Düzenli ifade (regex), bir metin desenini betimlemenin kısa yoludur — belirli bir dizeyi değil, bir dizenin uyması gereken kuralı ifade eder. Karakterleri döngüyle tek tek incelemek yerine, tek bir ifadeyle karmaşık bir yapı aranabilir veya doğrulanabilir.
Temel yapı taşları
- Karakter sınıfları —
\d(rakam),\w(harf/rakam/alt çizgi),\s(boşluk karakteri), veya[a-zA-Z]gibi özel bir sınıf. - Niceleyiciler —
*(0 veya daha fazla),+(1 veya daha fazla),?(0 veya 1),{2,5}(2 ile 5 kez arası). - Yakalama grupları — parantezler
(...)eşleşmenin bir kısmını işaretler, bu kısım daha sonra örneğin değiştirme işleminde ayrıca kullanılabilir. - Çıpalar —
^ve$deseni satırın başına veya sonuna bağlar.
\w neden Türkçe harfleri görmez
Bu aracın kullandığı JavaScript regex motorunda \w her zaman sadece [A-Za-z0-9_] anlamına gelir — yani ASCII harfleri, rakamlar ve alt çizgi. Türkçeye özgü ç, ğ, ı, ö, ş, ü harfleri bu aralığın dışında kalır, dolayısıyla /^\w+$/.test('İstanbul') false döner. u bayrağı eklemek de \w'nin tanımını genişletmez; Türkçe metni doğru yakalamak için /^\p{L}+$/u gibi Unicode harf özelliğine dayanan bir sınıf kullanmak gerekir. Ayrıca noktalı/noktasız "I" sorunu regex'i de dolaylı etkiler: büyük/küçük harfe duyarsız eşleştirme yapan bazı motorlar "i" ile "İ"yi veya "I" ile "ı"yı Türkçe kurallarına göre değil, varsayılan Unicode kurallarına göre eşleştirir, bu da beklenmeyen sonuçlara yol açabilir.
Açgözlü ve tembel eşleşme
Niceleyiciler varsayılan olarak "açgözlüdür" — mümkün olduğunca çok karakteri yakalamaya çalışır, ancak bu eşleşmeyi engellerse geri çekilir. Örneğin <.+> ifadesi <a>text</a> üzerinde ilk <'den son >'ye kadar her şeyi yakalar. Niceleyiciden sonra ? eklemek (<.+?>) onu "tembel" yapar — mümkün olduğunca az yakalar ve ilk geçerli eşleşmede durur.
Ne işe yarar
- Girdi verisinin biçimini doğrulamak (e-posta, telefon numarası, posta kodu).
- Tam eşleşme yerine bir desene göre metin arayıp toplu değiştirmek.
- Log kayıtlarından veya yapılandırılmamış metinden yapılandırılmış veri çıkarmak.
Felaket geri izleme (catastrophic backtracking)
(a+)+ gibi iç içe niceleyiciler, belirli girdilerde regex motorunu eşleşme olmadığına karar vermeden önce üstel sayıda kombinasyon denemeye zorlayabilir — görünüşte basit bir ifade sayfayı veya sunucuyu "kilitler". Bu gerçek bir güvenlik açığı sınıfıdır (ReDoS), bu yüzden karmaşık iç içe niceleyiciler yalnızca beklenen örneklerle değil, uzun ve "neredeyse eşleşen" dizelerle de test edilmelidir.