2008-10-10 24 views
6

Kullanıcı değiştirirken kaynak dosyalarında belirli kalıplarda çok sayıda arama yapmam gerekiyor, bu yüzden zaman ve bellekte verimli olan regexp eşleştirmesi yapmam gerekiyor. Desen kendini tekrar eder, bu yüzden bir kez derlenmeli, fakat alt bölümleri almam gerekiyor (sadece bir eşleştirmeyi onaylamak yerine)java.util.regexp yeterince verimli mi?

java.util.regexp veya Jakarta perl5util kullanmayı düşünüyorum (eğer hala mevcutsa) Bunu kullandığımdan birkaç yıl geçti, ya da belki Eclipse arama motoru, daha akıllı olduklarından şüpheliyim.

Bu ikisi arasında önemli bir performans farkı var mı?

cevap

9

Farklı regexp java motorları açısından büyük bir performans boşluğu olduğundan emin değilim.

Ama tabii atomic grouping kullanırken daha iyi kaçınılması (noted by Jeff Atwood olarak ve veri yeterince büyükse yani,) regexpi inşa bir performans sorunu

kaçınmalısınız tek şey catastrophic backtracking, orada. Eğer programda yeniden gerekiyor regexp'nin spesifik perl uyumlu kaynaklarına sahip olmadıkça

Yani, varsayılan olarak ben, java.utils.regexp motorunu kullanmak.

Daha sonra kullanmak istediğim regexp'i dikkatle yapıyorum.

  • dikkat -

    • "bu sırayla hızlı olsun, o iş yapmak":

      Ama bir motor seçme terim veya başka ... Bu many yılında has beensaid ... olarak

      "erken optimizasyon". VonC söylediği gibi
  • 3

    , kendi İfadelerinin bilmemiz gerekir. Regex'leri önceden DAHA FAZLA BAŞARILIYOR, bu her seferinde derlemeyi derleme maliyetini kötü bir şekilde yaralayabilir. Daha iyi performansa sahip olabilir http://jint.sourceforge.net/jint.html: Bazı kategorilerde

    , alternatif kütüphaneleri vardır. Sonra tekrar, kullandığınız java sürümüne bağlıdır.

    JDK 1.6, iyi özellikler ve performansla birlikte düzenli ifade motorunun olgunluğunu gösterir.

    2

    Genel olarak, java.util.regex ("regexp" değil) paketi en az Jakarta ORO ("Perl5Util" lib'iniz dahil) diğer herhangi bir Java regex kitaplığı kadar iyidir. Buna ek olarak, her ikisi de çakıcı şekilde hızlı ifadeler yazmak için paha biçilmez bulduğum atomik grupları ve iyelik nicelleştiricileri destekler. Ayrıca önceden derlenmiş regexleri ve yakalama gruplarını da destekler, ancak bence bu tüm kütüphaneler için doğrudur.

    İlgili konular