PCRE Şablonları
PHP Manual

Perl'e göre farklılıklar

PCRE'nin Perl'in 5.005 sürümüne göre farkları burada açıklanmıştır.

  1. PCRE'yi başka bir karakter türü tablosu ile derlemek mümkünse de bir boşluk karakteri, öntanımlı olarak, C kütüphanesinin isspace() işlevi ile tanınan bir karakterdir. Normalde isspace() işlevinin eşleştiği boşluk karakterleri, boşluk, sayfa ileri, satırsonu, satırbaşı yatay ve düşey sekme karakterleridir. Perl 5'te düşey sekme karakteri artık boşluk karakterlerinden biri olarak ele alınmamaktadır. \v özel karakteri Perl belgelerinde uzun zamandır yer almamaktadır. Yine de, 5.002 sürümüne kadar boşluk karakterlerinden biri olarak ele alınmaktaydı. 5.004 ve 5.005'te \s ile eşleşmemektedir.
  2. PCRE ileriye bakan savlarda yineleyicilere izin vermez. Perl buna izin verirse de bunu sizin düşündüğünüz tarzda ele almaz. Örneğin, (?!a){3} şablonu, sonraki üç karakterin "a" olmayacağını değil, sonraki "a"'nın üç kere yinelenmeyeceğini iddia eder.
  3. İleriye bakan savların içinde yer alan numaralı alt şablonlar sayılır fakat başlangıç yöneylerindeki girdileri hiçbir zaman ektin kılınmaz. Perl, savın başarısız olmasından önce eşleşen böyle şablonlardaki sayısal değişkenleri sadece ileriye bakan olumsuz bir sav tek bir dal oluşturuyorsa atar.
  4. İkil sıfır karakterleri eşleşmeye konu dizgede destekleniyorsa da normalde C dizgelerini sonlandırdıklarından şablonlar içinde bulunmalarına izin verilmez. Bir şablon içinde ikil sıfırı belirtmek için "\x00" dizilimi kullanılabilir.
  5. \l, \u, \L, \U Perl öncelemleri desteklenmemektedir. Aslında bunlar Perl'in genel dizge işlemleri altında gerçeklenmiş olup şablon eşleme motorunun parçaları değildirler.
  6. Perl'de \G savı, tekil şablon eşleşmeleri ile ilgili olmadığından desteklenmemektedir.
  7. Oldukça açıktır ki, PCRE (?{kod}) ve (??{kod}) oluşumlarını desteklemez. Ancak şablonlar içi içe olduğunda desteklenir.
  8. Numaralı alt dizgelerin şablonun yinelenen parçaları olduğu durumda Perl 5.005_02'den kaynaklanan bazı tuhaflıklar söz konusunudr. Örneğin, /^(a(b)?)+$/ şablonu "aba" dizgesiyle eşleşirken "b" değerine $2 atanır. Fakat, /^(aa(bb)?)+$/ şablonu "aabbaa" dizgesiyle eşleşirken $2'ye hiçbir şey atanmaz. Ancak, şablon, /^(aa(b(b))?)+$/ olarak yazılırsa $2 (ve $3) değişkenlerine değer atanır. Perl 5.004'te $2 her iki durumda da atanmaktadır. Eğer Perl, gelecekte bu tutarlı durumda bir değişiklik yapacak olursa PCRE de bu değişikliğe uyum sağlayacaktır.
  9. Perl 5.005_02'deki henüz çözümlenmemiş başka bir tutarsızlık da, PCRE'nin tersine /^(a)?(?(1)a|b)+$/ şablonunun "a" dizgesiyle eşleşmesidir. Bununla birlikte gerek Perl gerekse PCRE, /^(a)?a/ şablonunu "a" ile eşleştirirken $2 değişkenine hiçbir şey atamazlar.
  10. PCRE'nin Perl düzenli ifade oluşumlarına ek olarak bazı oluşumları vardır:

    1. Geriye bakan savların sabit uzunlukta dizgelerle eşleşmesi gerektiği halde, geriye bakan savın içerdiği her olasılık farklı uzunluktaki bir dizgeyle eşleşebilir. Perl 5.005'te her iki durumda da uzunlukların eşit olması gerekir.
    2. Eğer PCRE_DOLLAR_ENDONLY seçeneği etkinken PCRE_MULTILINE etkin değilse $ işleci sadece dizgenin en sonu ile eşleşir.
    3. Eğer PCRE_EXTRA etkinse tersbölü ile öncelenmiş karakterlerden özel anlamı olmayanlar hataya sebep olur.
    4. Eğer PCRE_UNGREEDY etkinse yineleyicilerin tamahkarlığı ters çevrilir, yani, yineleyicinin ardına bir "?" imi konmadıkça yineleyiciler öntanımlı olarak tamahkarlık göstermezler.


PCRE Şablonları
PHP Manual