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.