Daha sonra derleme işlemi tekrar olmadan birden dizeleri göre böylece, normal bir ifade derlemek için PHP bir yolu var mı? Diğer önemli dilleri yapabilirsiniz vb - Java, C #, Python, Javascript,
Yapabileceğini olumlu değilim. Eğer Mastering Regular Expressions kontrol ederseniz, bazı PHP özel optimizasyon teknikleri Chapter10 tartışılmaktadır: PHP. Onu uygular önce özellikle S model değiştirici kullanımı "Çalışması" düzenli ifade regex motoru neden. Lütfen desen ve metin bağlı olarak, bu size bazı gelişmeler hız verebilir.
Edit: Eğer books.google.com kullanarak kitabın içeriğine bir göz alabilir.
Perl-uyumlu düzenli ifadeler kütüphane diğer diller gibi bir Regex sınıfı yok sağlamadan zaten kullanım durumda optimize edilebilir olabilir:
Bu uzantı (4096 kadar) derlenmiş düzenli ifadeler küresel başına iş parçacığı önbelleği tutar.
Bu Imran açıklanan çalışma değiştirici çağrıları arasında derlenmiş ifade saklayabilirsiniz nasıl.
gebelik regexes muhtemelen aradığınız şey olduğu, büyük S (çalışma) değiştirici kullanabilirsiniz.
http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php
S
When a pattern is going to be used several times, it is worth spending more time analyzing it in order to speed up the time taken for matching. If this modifier is set, then this extra analysis is performed. At present, studying a pattern is useful only for non-anchored patterns that do not have a single fixed starting character.
Konu komut şu anda ilk kullanımdan sonra içeri çalıştıran parçacığı, derlenmiş regexp önbelleğe alınır ve PHP kullanılan bir dahaki sefere tekrar derleme değil.
Basit bir test:
<?php
function microtime_float() {
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
// test string
$text='The big brown <b>fox</b> jumped over a lazy <b>cat</b>';
$testTimes=10;
$avg=0;
for ($x=0; $x<$testTimes; $x++)
{
$start=microtime_float();
for ($i=0; $i<10000; $i++) {
preg_match_all('/<b>(.*)<\/b>0?/', $text, $m);
}
$end=microtime_float();
$avg += (float)$end-$start;
}
echo 'Regexp with caching avg '.($avg/$testTimes);
// regexp without caching
$avg=0;
for ($x=0; $x<$testTimes; $x++)
{
$start=microtime_float();
for ($i=0; $i<10000; $i++) {
$pattern='/<b>(.*)<\/b>'.$i.'?/';
preg_match_all($pattern, $text, $m);
}
$end=microtime_float();
$avg += (float)$end-$start;
}
echo '<br/>Regexp without caching avg '.($avg/$testTimes);
Regexp with caching avg 0.1 Regexp without caching avg 0.8
Regexpi önbelleğe o 8 kat daha hızlı yapar!