Düzenli ifade
- İngilizcesi
- Regular Expression
- Türkçe karşılığı
- normal ifade, kurallı ifade
- Okunuşu
- regyulır ikspreşın
Günlük kullanımda çoğunlukla İngilizcesi tercih edilir.
Kısaca
Düzenli ifade (regex), dizeler içinde aranacak, doğrulanacak, çıkarılacak veya değiştirilecek metni tarif eden, kompakt sözdizimli bir desendir.
Düzenli ifade (regular expression) nedir?
Düzenli ifade, metni tarif etmek için kullanılan küçük bir desen dilidir. \d{3}-\d{4} deseni “üç rakam, bir tire, ardından dört rakam” anlamına gelir ve bir regex motoru bunu bir dizenin eşleşip eşleşmediğini denetlemek, bir belgedeki her eşleşmeyi bulmak, her eşleşmenin parçalarını çıkarmak veya bunları değiştirmek için kullanabilir. Neredeyse her programlama dili, metin editörü ve grep ile sed gibi komut satırı araçları düzenli ifadeleri destekler.
Desenler birkaç parçadan oluşur. Sabit karakterler kendileriyle eşleşir, [a-z] ya da \d gibi karakter sınıfları bir kümeden tek bir karakterle eşleşir, *, +, ? ve {2,5} gibi niceleyiciler (quantifier) bir şeyin kaç kez tekrarlandığını söyler, ^ ve $ bağlayıcıları (anchor) ise bir eşleşmeyi metnin başına ya da sonuna sabitler. Parantezler yakalanıp yeniden kullanılabilen gruplar oluşturur ve bayraklar davranışı değiştirir; JavaScript'te büyük/küçük harfe duyarsız eşleşme için i, tüm eşleşmeleri bulmak için g gibi.
Regex, joker karakterli bir arama filtresi gibidir: tam olarak bir sözcük aramak yerine istediğiniz şeyin biçimini tarif edersiniz. Yaygın kullanımlar arasında posta kodu gibi girdileri doğrulamak, günlük satırlarını ayrıştırmak, bir kod tabanı boyunca bir şeyleri bulup yeniden adlandırmak ve verileri temizlemek vardır. Regex'lerin ayrıca yanlış yazılması kolay ve okunması zordur, bu yüzden onları kısa tutmak, yorumlamak ve hem eşleşen hem de eşleşmeyen örneklere karşı test etmek en iyisidir.
Düzenli ifadeler sıklıkla dosya adları için kullanılan glob desenleriyle karıştırılır. Bir glob'da *.txt “.txt ile biten herhangi bir dosya” anlamına gelirken bir regex'te * “önceki öğeyi tekrarla” anlamına gelir; dolayısıyla eşdeğer regex ^.*\.txt$ olur. Regex'ler ayrıca HTML veya JSON gibi iç içe biçimleri ayrıştırmak için zayıf bir araçtır; bunlar gerçek bir ayrıştırıcı gerektirir. İç içe tekrar içeren desenler belirli girdilerde üstel zaman alabilir; bu, ReDoS olarak bilinen bir hizmet reddi riskidir.
Önemli noktalar
- Regex, eşleşecek metnin biçimini tarif eden bir desendir.
- Karakter sınıfları, niceleyiciler, bağlayıcılar ve gruplar temel yapı taşlarıdır.
- Metin aramak, doğrulamak, çıkarmak ve değiştirmek için kullanılır.
- Dosya adları için glob desenleri benzer görünür ama farklı kurallar izler.
- Karmaşık regex'ler okunması zordur ve yavaş olabilir; bu yüzden küçük tutun ve test edin.
Örnek
const log = "2026-09-30 ERROR [auth] Login failed for user=ada";
// Capture the date, the level and the user name
const pattern = /^(\d{4}-\d{2}-\d{2}) (\w+) .*user=(\w+)$/;
const match = log.match(pattern);
if (match) {
const [, date, level, user] = match;
console.log(date, level, user); // 2026-09-30 ERROR ada
}
// Replace every digit with #
console.log("Call 555-0142".replace(/\d/g, "#")); // Call ###-####Sık sorulan sorular
Regex neyin kısaltmasıdır?
Regex, 1950'lerdeki biçimsel dil kuramından gelen bir terim olan regular expression'ın (düzenli ifade) kısaltmasıdır. JavaScript'in RegExp nesnesinde olduğu gibi regexp yazımı da yaygındır.
Düzenli ifadeler her dilde aynı mıdır?
Temel bilgiler ortaktır, ancak ayrıntılar POSIX, PCRE, JavaScript, Python ve .NET gibi çeşitler arasında farklılık gösterir. Lookbehind, adlandırılmış gruplar ve Unicode sınıfları gibi özellikler değişir; bu yüzden bir deseni gerçekten çalışacağı dilde test edin.
E-posta adreslerini regex ile doğrulamalı mıyım?
Basit bir regex bariz yazım hatalarını yakalayabilir, ancak tamamen doğru bir e-posta deseni son derece karmaşıktır. Güvenilir denetim, adrese bir onay iletisi göndermektir.
İlgili sayfalar
- DizeProgramlamanın Temelleri, s. 14Dize, bir isim, cümle, URL ya da dosya içeriği gibi metni sıralı bir karakter dizisi olarak temsil eden bir veri türüdür.
- Girdi DoğrulamaGüvenlik, s. 11Girdi doğrulama, programa giren verinin kullanılmadan önce beklenen türde, biçimde ve aralıkta olup olmadığını kontrol etme ve gerisini reddetme pratiğidir.
- AlgoritmaProgramlamanın Temelleri, s. 1Algoritma, bir listeyi sıralamak ya da en kısa yolu bulmak gibi bir sorunu çözmek veya bir işi tamamlamak için izlenen, sonlu ve adım adım yönergeler bütünüdür.
- PerlProgramlama Dilleri, s. 22Perl, metin işleme ve yerleşik düzenli ifadeleriyle ünlü, olgun ve dinamik bir betik dilidir; uzun süre sistem yönetiminde ve web betiklerinde kullanıldı.
- Tam Metin AramaVeritabanları, s. 35Tam metin arama, verilen sözcükleri ya da ifadeleri içeren dokümanları bir metin indeksinde arayarak bulan ve sonuçları alaka düzeyine göre sıralayan tekniktir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin