Regex Test Aracı
Düzenli ifade yazın, deneme metnini yapıştırın; eşleşmeler canlı vurgulansın — yakalama grupları, bayraklar ve anlaşılır hatalarla.
1.030 görüntülenme
0 eşleşme
Nasıl Çalışır
Düzenli ifade (regex), tek bir harfi harfine dizgi yerine bir karakter desenini tanımlar; böylece kısa bir ifade, tüm bir metin ailesiyle eşleşebilir: herhangi bir e-posta adresi, birkaç farklı biçimdeki herhangi bir telefon numarası, bir log dosyasında "ERROR" ile başlayan herhangi bir satır. JavaScript düzenli ifadenizi yazın, bayraklarını (g tüm eşleşmeler, i büyük/küçük harf duyarsız, m çok satırlı çapalar, s nokta yeni satırı da eşler, u tam Unicode) açın ve örnek metni yapıştırın: her eşleşme yerinde vurgulanır ve altta konumu ile varsa yakalama gruplarıyla listelenir. Parantezler () bir yakalama grubu oluşturur — yalnızca bir eşleşme olduğunu bilmek yerine, eşleşen metnin belirli bir parçasını (bir e-postadaki alan adı veya bir tarihteki yıl gibi) ayrı ayrı çekmenin yoludur.
Neredeyse herkesi başta şaşırtan bir ayrım vardır: açgözlü (greedy) ile tembel (lazy) niceleyiciler. .* açgözlüdür — mümkün olduğunca çok metin eşleştirmeye çalışır, yalnız gerektiğinde geri iz sürer. <b>bold</b> ve <i>italic</i> girdisine karşı <.*> deseni, ilk <'dan en son >'ya kadar açgözlüce eşleşir ve iki etiketi de yutar. Sonuna ? ekleyip .*? yapmak onu tembelleştirir — mümkün olduğunca az eşleşir, böylece <.*?> ilk >'da durur ve doğru şekilde yalnız <b>'yi eşleştirir. Saf HTML eşleştiren regex'lerin gerçek dünya biçimlendirmesinde neden bozulduğunun nedeni tam olarak budur.
Bilinmesi Gerekenler
Buradaki motor, tarayıcınızın kendi yerli JavaScript (ECMAScript) düzenli ifade gerçeklemesidir; yani burada eşleşen bir desen, JS kodunuzda da birebir aynı eşleşir — araya bir çeviri katmanı girmez. Diğer dillerin regex lehçeleri — PCRE (PHP), Python'ın re'si, Java'nın Pattern'ı — çekirdek sözdiziminin çoğunu (karakter sınıfları, niceleyiciler, gruplar) paylaşır ama ileri özelliklerde ayrışır: geriye bakma (lookbehind) desteği, adlandırılmış grup sözdizimi, iyelik niceleyicileri ve bazı kaçış dizileri farklıdır. Yayımlamadan önce uç durumları hedef dilde de mutlaka yeniden test edin.
Felaket düzeyinde geri izlemeye dikkat edin: iç içe veya çakışan niceleyicili desenler, örneğin sonunda "b" olmayan uzun bir "a" dizisine karşı test edilen (a+)+b, motoru üstel geri izlemeye zorlayıp sayfayı — veya aynı nedenle canlı sunucunuzu — dondurabilir. Bir desen burada takılırsa önce deneme metnini kısaltın, sonra deseni yeniden yapılandırın (genelde iç içe tekrarı tamamen kaldırarak) — sadece daha fazla işlemci gücü vermek yerine. Her şey tarayıcınızda yerel çalışır; hiçbir desen veya metin hiçbir yere iletilmez.
Pratik ipucu: karmaşık bir deseni tek seferde yazmak yerine küçük parçalar hâlinde kurun, her parçayı örnek metinle test edin, sonra birleştirin — bu yaklaşım hem hataları erken yakalamanızı sağlar hem de sonradan deseni okuyan bir başkasının (ya da gelecekteki sizin) niyeti anlamasını kolaylaştırır.
Sıkça Sorulan Sorular
Hangi regex lehçesi kullanılıyor?
JavaScript (ECMAScript) — tarayıcının yerli motoru. Desenler JS kodunuzdaki ile birebir aynı davranır; PCRE ve Python çoğu sözdizimini paylaşır ama bazı ileri yapılarda ayrışır.
Bayraklar ne işe yarar?
g ilk yerine tüm eşleşmeleri bulur; i büyük/küçük harfe bakmaz; m ile ^ ve $ satır başına çalışır; s ile nokta yeni satırı da eşler; u tam Unicode desteği açar.
Desenim sayfayı neden donduruyor?
İç içe niceleyicili bazı desenler ((a+)+b gibi) uzun metinde felaket düzeyinde geri izleme yapar. Metni kısaltın veya deseni yeniden kurun — aynı donma canlı kodunuzda da yaşanırdı; bunu burada görmek kazançtır.
Yakalama grubu nedir, neden önemlidir?
Bir desenin bir kısmını parantez içine almak yakalama grubu oluşturur; bu, eşleşen alt metni ayrı olarak çıkarmanızı sağlar — örneğin (\d{4})-(\d{2})-(\d{2}) bir tarihle eşleştiğinde yıl, ay ve günü tüm dizginin tarihe benzediğini doğrulamak yerine üç ayrı yakalama olarak verir. (?:...) ile yazılan yakalamasız gruplar ise ekstra yakalama üretmeden yalnızca yapısal gruplama sağlar.
Desenim neden beklediğimden fazla (veya az) metin eşleştirdi?
Neredeyse her zaman açgözlü/tembel karışıklığıdır. .* ve benzeri niceleyiciler varsayılan olarak mümkün olduğunca çok eşleşir; onları tembelleştirmek için ? ekleyin (.*?, +?) — o zaman son yerine ilk mümkün noktada durur. Bir regex birden çok satır veya etiket boyunca "fazla eşleşiyorsa" çözüm genelde bu tek karakterdir.
Benzer Araçlar
Sorun Bildir
Regex Test Aracı
Yorumlar
Henüz yorum yok — ilk yorumu siz yazın!