DevToolPal
TR

PCRE Regex Test Aracı

PHP / Perl uyumlu düzenli ifadeleri gerçek PCRE2 motoruyla test edin: özyineleme, possessive niceleyiciler, \K ve daha fazlası.

Yerelde çalışır, asla yüklenmez

Seçenekler

Test metni

0 karakter · 0 B

Sonuç

Sonuç burada görünür

Bu araç ne yapar

PCRE regex test aracı, bir düzenli ifadeyi metninize karşı gerçek PCRE2 kütüphanesiyle, yani PHP’nin, Perl tarzı araçların ve birçok web sunucusunun kullandığı motorla test eder. Eşleşmeler vurgulanır, her eşleşme konumu ve yakalama gruplarıyla listelenir; isteğe bağlı bir değiştirme ise preg_replace tarzı bir değiştirmenin sonucunu gösterir.

Gerçek motorla test etmek önemlidir; çünkü PCRE ve JavaScript düzenli ifadeleri küçük ama önemli şekillerde farklılık gösterir. Tarayıcı tabanlı bir test aracında çalışan bir desen PHP’de derlenemeyebilir veya farklı bir şeyle eşleşebilir.

Nasıl kullanılır

  1. Deseni sınırlayıcılar olmadan PCRE deseni alanına yazın.
  2. Aranacak metni Test metni alanına yapıştırın.
  3. İhtiyacınız olan değiştiricileri açın: tüm eşleşmeler için g (preg_match_all gibi), i, m, s, x, U ve Unicode uyumlu \w, \d ve \b için u.
  4. Değiştirmeyi önizlemek için isterseniz Şununla değiştir alanını doldurun. Numaralı gruplar için $1 veya ${1}, adlandırılmış gruplar için ${name}, eşleşmenin tamamı için $0 kullanın.

Geçersiz desenlerde PCRE2’nin kendi hata mesajı ve desende vazgeçtiği konum gösterilir.

Örnek

Varsayılan desen \((?:[^()]++|(?R))*\) dengeli parantezleri bulur. İçinde ya parantez olmayan karakterler ya da özyinelemeli olarak desenin tamamı bulunan bir parantez çiftiyle eşleşir. Örnek metinde (a, g(b, c)) ve ((x), y) ifadelerini bulur ve sondaki kapanmamış parantezi yoksayar. JavaScript düzenli ifadeleri bunu ifade edemez.

İkinci satırdaki tutarları ve para birimi kodlarını yer değiştirmek için (?<amount>\d+(?:\.\d+)?)\s+(?<cur>USD|EUR) desenini ${cur} $1 değiştirmesiyle deneyin.

Bilinmeye değer PCRE özellikleri

  • Possessive niceleyiciler (*+, ++, ?+) ve atomik gruplar ((?>...)) eşleştirdiklerini asla geri vermez; bu da kontrolden çıkan geri izlemeyi önler.
  • \K eşleşmenin başlangıcını sıfırlar; lookbehind’a basit bir alternatiftir.
  • (?R), (?1) veya (?&name) ile özyineleme, iç içe yapılarla eşleşir.
  • (?i) gibi satır içi değiştiriciler, desenin bir bölümü için davranışı değiştirir.

İpuçları

  • PHP’de deseni /.../ veya ~...~ gibi sınırlayıcılarla sarın ve desende geçmeyen birini seçin; böylece onu kaçış karakteriyle yazmanız gerekmez.
  • Metniniz aksanlı harfler veya CJK karakterleri içeriyorsa \w bunlarla eşleşsin diye u seçeneğini açın.

SSS

› Bunun JavaScript regex test aracından farkı nedir?

Bu sayfa, PHP’nin preg_ fonksiyonlarının, Nginx’in, Apache’nin ve diğer birçok aracın arkasındaki motor olan PCRE2’yi WebAssembly’ye derlenmiş halde çalıştırır. JavaScript’in desteklemediği söz dizimlerini destekler: (?R) ile özyineleme, a++ gibi possessive niceleyiciler, atomik gruplar, \K, (?P<name>...) grupları ve x ile U değiştiricileri.

› /pattern/i gibi sınırlayıcıları yazmam gerekiyor mu?

Hayır. Yalnızca deseni girin ve değiştiricileri onay kutularıyla açın. PHP’deki `preg_match('/\d+/i', $s)`, Büyük/küçük harfi yoksay seçeneği açık olan `\d+` desenine karşılık gelir.

› Neden "match limit exceeded" hatası aldım?

Uzun ve eşleşmeyen bir metin üzerindeki ^(a+)+$ gibi bazı desenler üstel sayıda geri izleme (backtracking) yapar. Sayfanın yanıt vermeye devam etmesi için test aracı beş milyon adımdan sonra durur. PHP’de de benzer bir koruma, pcre.backtrack_limit vardır; sınıra ulaşıldığında preg_match false döndürür.

› Metnim yükleniyor mu?

Hayır. PCRE2 WebAssembly modülü bir kez indirilir ve her şey tarayıcınızda çalışır.