From: Robert Klemme Date: 2004-12-16T22:42:12+09:00 Subject: Re: String.scan - catching overlapping patterns with lookahead "Ardanwen" schrieb im Newsbeitrag news:1103202699.721826.143490@f14g2000cwb.googlegroups.com... > So I changed it into the following, and then optimized a little bit > (first did virus.scan(/(?=#{x})/ which is a little slower then what I'm > doing now) > > ------ > $proteasome.each {|x| > virus.scan(/#{x[0].chr}(?=#{x[1,4]})/) { > count_prot += 1 > } > } > ------ > > The sad thing is, the above is comparable in speed with the script I > had before I found out about the scan method. Did I miss any obvious > optimizations in the scanning/regexp method? Do you have any metacharacters in the strings contained in $proteasome? In that case you should use Regexp.escape. Although it might be a small optimization, you could split your search string at another position than the first. For example, if you search for "foofii" then you can split after the second "o" without loosing anything. In fact you could even skip the lookahead for "foofii" completely, because if it matches the earliest next match is after the complete string. However there's a certain overhead involved in finding this position so it might not be worth it if the strings you search through are short. If you search through huge piles of data then it might be worthwile. See also http://en.wikipedia.org/wiki/String_searching_algorithm Kind regards robert