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.
-
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.
-
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.
-
İ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.
-
İ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.
-
\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.
-
Perl'de \G savı, tekil şablon eşleşmeleri ile ilgili olmadığından
desteklenmemektedir.
-
Oldukça açıktır ki, PCRE (?{kod}) ve (??{kod}) oluşumlarını desteklemez.
Ancak şablonlar içi içe olduğunda desteklenir.
-
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.
-
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.
-
PCRE'nin Perl düzenli ifade oluşumlarına ek olarak bazı oluşumları vardır:
-
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.
-
Eğer PCRE_DOLLAR_ENDONLY
seçeneği etkinken
PCRE_MULTILINE
etkin değilse $ işleci sadece dizgenin en sonu ile eşleşir.
-
Eğer
PCRE_EXTRA
etkinse tersbölü ile öncelenmiş karakterlerden özel anlamı olmayanlar
hataya sebep olur.
-
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.