PHP regex farklı sürümleri veya farklı işletim sistemi üzerinde yıllardan farklı davranır

2 Cevap php

Ben iki farklı işletim sistemi üzerinde yıllardan php iki farklı sürümünü kullanıyorum.

Bir pencere (wamp) üzerine 5.2.9 çalışan olduğunu.

Bir CentOS 5 (lamba) üzerinde çalışan 5.2.6 olduğunu.

Grup adlarını içeren Regex ancak CentOS üzerinde Windows'ta bir çalışır.

Bu örnek, /^field_(?<myname>.+)/ olur

Bu bir işletim sistemi sorunu var mı? Ya yolu PHP ile bir inşa edildi?

Teşekkürler,

2 Cevap

PHP mevcut en regex fonksiyonları geri libpcre için türetmek, o kütüphane bazı güvenlik sorunları karşısında birkaç yıl içinde çalkantılı bir geçmişi olmuştur, bu sorunlar için düzeltmeler semantik değiştirin. Varsayılan olarak PHP'yi o burada changelog kaydetti değiştirdiğinde, bir paket libpcre kullanır: http://www.php.net/ChangeLog-5.php. Bazı dağıtımlar veya kendiniz derlemek php bu sürümü semantik olacak bir dış libpcre kullanmasına neden olabilir.

O kadar şey sizin regex ben belirttiği gibi, doğru değildir, tarihsel sürümleri, ters inl çalışma eğilimi son sürümü ile çalışır, yani ileri kırmak eğilimi dışında iyi bir çözüm yoktur.

Hangi regex işlevleri kullanıyorsunuz? PHP ereg ve preg, ve gebelik düzenli ifade Perls düzenli ifade gibi davranır ve tüm işletim sistemleri üzerinde aynı davranması gerektiğini.