Sadece bir iki zaten mükemmel, aykırı ise, cevaplar ek.
PCRE kütüphane dokümantasyon her zaman "aralıkları karakter değerler harmanlama sırayla çalışır" belirtti. Hangi biraz belirsiz ve henüz çok hassas.
Bu index kullanarak mevcut yerel maç kadar ayarlanabilir PCRE'nin dahili karakter tabloları, karakter pcre_maketables
. That function builds the tables in order of char value (tolower(i)
/ {[(tarafından harmanlama anlamına gelir 3)]})
Başka bir deyişle, gerçek kültürel sıralama düzeni (yerel harmanlama bilgi) tarafından harmanlanmıyor değildir. Almanca davranır Sözlük harmanlama o aynı Ø iken bir örnek olarak, ö Alman (ISO-8859-x, unicode kodlamaları vs) için kullanılan tüm ortak karakter kodlamaları az aralığın dışında görünür kılan bir değeri vardır Bu durumda, PCRE ö değil, herhangi bir fiili yerel tanımlı sıralama düzeni daha o kod değeri, üzerine [a-z]
aralığında olup olmadığı konusundaki kararlılığını temel olur.
PHP, çoğunlukla PCRE's documentation aynen kopyalanmış olan their docs. Ancak, onlar aslında "aralıkları ASCII karakter sıralamasına faaliyet" için yukarıdaki ifadeyi değiştirerek ağrıları için gittim. Bu açıklama en azından 2004 yılından beri dokümanlar olmuştur.
Yukarıdaki rağmen, ben ancak, bu doğru pek emin değilim.
Eh, her durumda, en azından.
Bir arama PHP yapar pcre_maketables
... Gönderen PHP source:
#if HAVE_SETLOCALE
if (strcmp(locale, "C"))
tables = pcre_maketables();
#endif
PHP derlendiği için ortam varsa diğer bir deyişle, setlocale
and (LC_CTYPE) yerel POSIX / C yerel değil, çalışma zamanı ortamın POSIX / C yerelin karakter sırasını kullanılır. Aksi halde, varsayılan PCRE tabloları kullanılır - PCRE derlenmiş ({[) (2]}) tarafından oluşturulan hangi - based on the compiler's locale:
Bu function () geçersiz kılmak için bu pcre_compile geçirilebilir. Karakteri az 256 değerleri için karakter tabloları kümesi oluşturur PCRE'nin iç, dahili (PCRE derlenmiş zaman pcre_maketables () tarafından yapılmıştır) tabloları. Eğer standart dışı bir yerel ayarı kullanıyorsanız bunu yapmak isteyebilirsiniz. Fonksiyon tabloları bir işaretçi verir.
Alman herhangi bir ortak karakter kodlaması [a-z]
için farklı olmaz ise biz EBCDIC ile ilgili olsaydı, örneğin, [a-z]
± ve ~ içerir. Verilen EBCDIC ben aklınıza gelebilecek bir karakter kodlaması kesintisiz sırayla az ve AZ yer yok olduğunu.
Eğer (çok kendi, çok özel, ısmarlama yerel tanımını kullanarak) en karanlık PHP'nin ya da çalışma ortamı ama bir şey umlauts dahil olurdum derece düşüktür ise, (ve o olabilir) EBCDIC kullanırken PCRE'nin bazı büyü yapar sürece , sen might, EBCDIC durumunda, diğer istenmeyen karakterler içerir. Ve diğer aralıklar için, "ASCII sırayla harmanlanmış" tamamen doğru görünmüyor.
ETA: Ben benzer bir endişe Philip Hazel kendi cevap arayan bazı araştırma kayıtlı olabilir:
Another issue is with character classes ranges. You would think that [a-k] and [x-z] are well defined for latin scripts but that's not the case.
Onlar kesinlikle iyi yani, kültürel sıralama düzeni değil, kod düzeniyle ilgili, [\ x61-\ x6b] ve [\ x78-\ x7a] eşdeğer olmak tanımlanır.