2013-07-29 31 views
7

PHP'nin preg_match bazı durumlarda tekrarlayan karakterleri eşleştirmek için bir 3276 karakter sınırlaması vardır anlaşılmaktadır.PHP preg_match uzunluğu 3276 sınırı

yani

^(.|\s){0,3276}$ çalışır, ancak ^(.|\s){0,3277}$ yapmaz.

Her zaman /^(.){0,3277}$/ eserler olarak uygulamak görünmüyor.

Bu PHP'nin belgelerine veya hata takip yerde söz bulamıyorum. numara 3276 garip sınırın biraz Aklıma gelen tek şey imzalı bir 16 bit tamsayı için sınır olan yaklaşık 1/10'u 32767 arasında olmasıdır görünüyor.

preg_last_error() 0 döndürür

Ben http://www.phpliveregex.com/ üzerine konuyu hem de benim yerel sistem ve web sunucusu çoğaltılamaz ettik.

DÜZENLEME: Biz gibiler ": preg_match(): Uyarı Derleme başarısız oldu: düzenli ifade de 16 ofset çok büyük" o PHP preg_match_all limit aynı sorun gibi görünüyor, bu yüzden kod dışarı.

Ancak regex kendisi PHP çok büyük yapıyor gruplar tekrar gelmiş genişleme çeşit yapıyor mu ... çok büyük değil mi?

+0

büyük olasılıkla daha sonra var sen büyük bir diziye sağlamak için yeterli belleğe sahip maks bellek sınırını yukarı darbeleme denemek ve görmek gerek böylece bir bellek sınırı, preg_match birçok unsurları ile bir dizi döndürür olduğunu eğer değişirse. –

+1

'preg_last_error()' ı kontrol ettiniz mi? –

+0

hata bildiriminde mi bulunuyor? Eğer çok fazla bellek – x4rf41

cevap

0

Perl uyumlu düzenli ifadeleri ele amacıyla ^(.|\s){0,3276}(.|\s){0,1}$

1

kullanarak deneyin, PHP sadece işin ilgilenir bir third-party library demetleri.

"*" nicelik {1,} {0,}, "+" nicelik eşdeğerdir ve: tarif davranış aslında documented olduğunu "?" nicelendirici {0,1}. n ve m, Perl inşa edildiğinde tanımlanan önceden belirlenmiş bir sınırdan daha az negatif olmayan tamamlayıcı değerleri ile sınırlıdır. Bu, genellikle en yaygın platformlarda 32766'dır.

yüzden her zaman zor bir sınırı var. Testleriniz neden PHP limitinin tipik olandan 10 kat daha küçük olduğunu gösteriyor? O :) hakkında hiçbir fikri

+0

+1, çünkü bu muhtemelen sorun. Bu soruda görülen daha küçük sınır sadece '.' ve' \ s’yi birleştirirken, büyük miktarda geri dönüş üretmeyi neredeyse garanti edecek şekilde uygulanır. Limitin geri dönüşten etkilendiğini tahmin edersek (ki bu mantıklı bir tahmindir) o zaman sınırın bu seviyeye düşmesi sürpriz olmayacaktır. – Spudley