olmadan oluşturuldu mu algıladıysanız, çok baytlı dizeler için \P
ifadelerini içeren bir dizi normal ifade kullanan bir PHP kitaplığı var.PCRE, --enable-unicode özellikleri veya --enable-utf8 yapılandırma anahtarları
((((?:\P{M}\p{M}*)+?)|(\'[^\']*\')|(\"[^\"]*\"))!)?\$?([a-z]{1,3})\$?(\d+)
Bu, çoğu yapı üzerinde çalışırken, regexp ile ilgili bir hata döndüren birkaç rapor aldım.
Çalışma platformu bağlı olarak, PCRE'den hata iletileri şunlardır:
n ofset derlenmemiştir nDerleme başarısız: PCRE'nin \ L desteklemez, \ l \ N \ p \ p \ U \ u, \ P, \ p için destek ve \ X
veya
Compilation ofset veya \ x başarısız
Kodumun başında
\P
kullanan bir regexp'i test ettiğimi ve döndürülen bir hatayı yakalayabileceğimi biliyorum, ardından bu yanıtı uyumluluk bayrağı ayarlamak ve bozulmamış (UTF-8 olmayan) bir regexp sağlamak için kullanabilirsiniz. Bu uyumluluk bayrağına dayanan kodumun ana gövdesi içinde\P
. PCRE--enable-unicode-properties
veya--enable-utf8
yapılandırma anahtarlar olmadan inşa edilmişti olmadığını belirlemek için herhangi basit bir yolu olup olmadığınımerak ediyordum. PHP,
PCRE_VERSION
sabitine erişim sağlar, ancak bu,\P
desteğinin etkin olup olmadığını tanımlamaya yardımcı olmaz. deneyerek dışında
... bastırılabilirdi uyarı ile bir kez basit Regexp'i çalışıyor. Derlenmediği platformlarda bu sabitin mevcut olup olmadığını kontrol edin ('PREG_BAD_UTF8_OFFSET ');') Eğer yoksa, çekiniz var. Eğer yaparsa, phpinfo() 'yi her zaman ayrıştırabilirsiniz, ancak bu ucuz olmaz ... – ircmaxell
phpinfo() aslında bu bilgiyi sağlamıyor ... Ben zaten kontrol ettim. Yeni bir PCRE benim test sunuculardan birinde üzerine inşa edilecek ve PREG_BAD_UTF8_OFFSET tanımlanması durumunda ben sadece tanımlanmış bir sabit test başardı eğer, bu benim son çare için daha temiz bir alternatif oluşturacaktır görmek için buna karşı PHP yeniden yapacağız. –
PCRE, PHP tarafından derlendiği için PHP için bir konfigürasyon seçeneği olmamalı mı? (anlamı Phpinfo'nun 'configure' satırında görünmüyor)? PHP hiçbir ekstra PHP yapılandırma ayarları ile, dahili PCRE, varsayılan olarak etkinleştirilmiş tüm PCRE baytlı seçenekleri ile yerleşik kullanıyorsa ben – ircmaxell