Şablonların içindeki bazı ögeler diğerlerine göre daha verimli olabilir. Örneğin, [aeiou] gibi bir karakter sınıfı, (a|e|i|o|u) gibi bir olasılık kümesine göre daha verimlidir. Genelde, gerekli davranışı sergileyen en basit oluşum normal olarak en verimli oluşumdur. Jeffrey Friedl'ın kitabı, düzenli ifadelerin verimini arttırmak için en iyilenmeleriyle ilgili bir çok inceleme içerir.
Bir şablon .* ile başlıyorsa ve PCRE_DOTALL seçeneği
etkinse, şablon, sadece eşleşmeye konu dizgenin başlangıcı ile
eşleşebileceğinden, örtük olarak PCRE tarafından demirlenir. Bununla
birlikte,
PCRE_DOTALL seçeneği etkin değilse, nokta işleci satırsonu
karakteri ile eşleşmeyeceğinden ve eşleşmeye konu dizge çok sayıda
satırsonu içeriyorsa şablon dizgenin başlangıcından başka diğer
satırsonu karakterlerinin sonrası ile de eşleşeceğinden PCRE bu en
iyilemeyi yapamaz. Örneğin, (.*) ikinci
şablonu, ilk
yakalanan alt dizge "ve" olmak üzere "birinci\nve ikinci" dizgesiyle
eşleşir (\n satırsonu karakteridir). PCRE bunu yaparken, eşleşmeye konu
dizgedeki her satırsonu karakterinden sonra eşleşme başlatmayı
tekrarlamak zorundadır.
Böyle bir şablonu satırsonu karakteri içermeyen bir dizgeyle eşleştirmek için kullanıyorsanız en iyi başarımı PCRE_DOTALL seçeneğini etkin kılarak veya demirlemeyi açıkça belirtmek için şablonu ^.* ile başlatarak sağlayabilirsiniz. Bu, PCRE'yi her satırsonunda eşleşmeyi yeni baştan başlatmaktan kurtarır.
İç içe sonsuz sayıda yineleme içeren şablonlara karşı dikkatli olun.
Kendileriyle eşleşmeyen bir dizgeye rastladıklarında sonuç almak çok
uzun sürebilir. Örneğin (a+)*
şablonunu ele alalım.
Bu şablon "aaaa" dizgesiyle 33 farklı yolla eşleşir ve dizge uzadıkça bu sayı büyük bir hızla artar. (* yinelemesi 0, 1, 2, 3, 4 kere eşleşir ve sıfırdan farklı bütün durumlarda + yinelemeleri farklı kereler eşleşebilir.) Şablonun kalanı böyle olduğu takdirde şablonun tamamıyla eşleşme mümkün olmayacaktır. PCRE kural olarak olası her çeşit yinelemeyi deneyeceğinden bu işlem oldukça uzun bir zaman alacaktır.
Şablonun ardına, (a+)*b
şeklinde özel olmayan bir
karakter getirilmesi gibi basit çözümlerle bir en iyileme mümkündür.
Standart eşleştirme işlemlerine girişmeden önce, PCRE eşleşmeye konu
dizgenin sonlarına doğru bir "b" varlığını araştırır; bulamazsa, hemen
eşleşmenin başarısız olduğunu bildirir. Ancak böyle arda eklenebilecek
özel olmayan bir karakterin yokluğunda bu en iyileme kullanılamaz.
(a+)*\d
şablonunun davranışını yukarıdaki şablonla
karşılaştırarak farkı görebilirsiniz. Birincisi sadece "a"lardan oluşan
bir satıra uygulandığında hemen her durumda daima anında başarısız
olurken ikincisinin başarısızlığı dizge 20 karakterden uzun olduğunda
farkedilebilecek kadar uzun bir süre sonra gerçekleşir.