Regexplerin vs dize manipülasyon

0 Cevap java

Biz sık sık Regexplerin yavaş ve mümkün olduğunca kaçınılması gerektiğini söyledim.

Ancak, dikkate bazı dize manipülasyon kendini (not talking about algorithm mistakes - this is a different matter), özellikle PHP veya Perl içinde yapmanın yükü alarak (belki Java) limit bu durumda biz dize işleme daha iyi bir alternatif olarak düşünebilirsiniz, nedir? Özellikle CPU açgözlü nedir regexp'nin vardır?

Örneğin, aşağıdaki için, C++ in, Java, PHP veya Perl, ne önerirsiniz

Regexp'nin muhtemelen daha hızlı olacaktır:

  • s/abc/def/g veya ... while((i=index("abc",$x)>=0) ...$y .= substr()... tabanlı bir çözüm?
  • s/(\d)+/N/g ya da bir tarama algoritması

Ama ne

  • Bir e-posta doğrulama sıradanifade?
  • s/((0|\w)+?[xy]*[^xy]){2,7}/u/g

(daha uzun yazmak için ise) bir el yapımı ve özel bir algoritma daha hızlı olmaz mı?

edit

Sorunun nokta daha iyi dize manipülasyonu aracılığıyla belirli bir sorun için yeniden yazılması olacağını regexp ne tür belirlemek için?

edit2

Ortak bir uygulama Perl sıradanifade olduğunu. Perl Örneğin - onlar nasıl uygulandığını bilmek gerektirir - uygulama süreci uzun ve etkisiz hale getirecek, çünkü kind regexp ne, kaçınılması gereken nedir? Bu karmaşık bir sıradanifade olmayabilir ...

edit July 2011 (yorumlarına dayanarak)

Ben bütün regexp'nin yavaş demiyorum. Bazı özel regexp'nin desenler nedeniyle onların belirli işleme ve nedeniyle uygulanması, yavaş olduğu bilinen oldukça yavaş olduğu bilinen, örneğin son Perl / PHP uygulamalarında, In
-.? Ve kaçınılmalıdır
cevabı zaten kendi araştırma yaptım kişi (profiler. ..) beklenen ve tavsiye ne / kaçınılması gereken hakkında genel kurallar bir türlü sağlayamıyoruz kim olduğunu.

0 Cevap