Bir metinde e-posta adresi bulmak, log dosyasından hata kodu çekmek ya da bir form alanının yalnızca rakam kabul etmesini sağlamak için yazdığımız .*, +, ? ve köşeli parantezler ilk bakışta mütevazı araçlardır. Fakat bu semboller, bilgisayar biliminin en zarif fikirlerinden birine açılan kapıdır: Her desen aynı türden değildir; her dili aynı güçte bir makine tanıyamaz. Regex yazarken aslında, çoğu zaman fark etmeden, Chomsky Hiyerarşisi denen matematiksel bir karmaşıklık merdiveninde dolaşırız.
Desen aramak mı, dil tanımlamak mı?
Regex çoğu geliştiricinin zihninde bir “metin bulma aracı”dır. Oysa kuramsal açıdan düzenli ifade, bir dili tanımlar: Kabul edilecek tüm karakter dizilerinin kümesini. Örneğin ab*, önce bir a, ardından sıfır veya daha fazla b içeren dizileri tanımlar: a, ab, abbb gibi. Bu küçük ifade, sonsuz sayıda olası metni birkaç sembolle tarif eder. Gücü tam da buradadır: Sonlu bir tariften sonsuz bir davranış üretmek.