Normal ifade (Regular Expression, kısaca Regex/RegExp), tek bir dize kullanarak belirli sözdizimi kurallarına uyan bir dizi diziyi tanımlayan ve eşleştiren bir metin deseni dilidir. Tarihi, 1950'lerde nörolog Warren McCulloch ve matematikçi Walter Pitts tarafından önerilen nöronların matematiksel modeline kadar uzanır, daha sonra matematikçi Stephen Kleene 1956'da buna dayanarak «normal kümeler»in cebirsel tanımını önerdi. Unix'in babası Ken Thompson, 1960'ların sonunda normal ifadeleri ilk olarak QED düzenleyicisinde uyguladı, bundan sonra normal ifadeler Unix araç zincirinin (grep, sed, awk, vi) temel işlevi haline geldi.
Modern programlama dillerinde normal ifadeler neredeyse standart bir yetenektir — JavaScript'teki RegExp, Python'daki re modülü, Java'daki java.util.regex, .NET'teki Regex sınıfı, Go'daki regexp paketi normal ifade desteği sağlar. Normal ifadeler, form doğrulama (e-posta/telefon numarası/kimlik), metin arama ve değiştirme (düzenleyicilerde bul ve değiştir), günlük analizi (ERROR günlüklerini çıkarma), web tarayıcıları (HTML içeriği çıkarma), veri temizleme (ETL), rota eşleştirme, girdi filtreleme ve güvenlik koruması (WAF kuralları) gibi senaryolarda yaygın olarak kullanılır.
Normal ifadelerin temel kavramları şunları içerir: karakter sınıfları (\d rakamlar, \w kelime karakterleri, \s boşluk), niceleyiciler (* sıfır veya daha fazla, + bir veya daha fazla, ? sıfır veya bir, {n,m} belirtilen sayıda), çapalar (^ başlangıç, $ son, \b kelime sınırı), gruplar (... yakalama grubu, (?:...) yakalamayan grup, (?<name>...) isimlendirilmiş grup), dallanma (|), karakter kümeleri ([a-z]), etrafına bakma ((?=...) pozitif ileri bakış, (?!) negatif ileri bakış) vb. Normal ifadelerde uzmanlaşmak metin işleme verimliliğini önemli ölçüde artırır, ancak ReDoS gibi performans tuzaklarına karşı korumaya da dikkat edilmelidir.