dblack / wobblini.net wrote:
> Hi --
> 
> On Wed, 5 Apr 2006, Clint Pidlubny wrote:
> 
>> Hello,
>>
>> What is the best approach to searching a string for another string?
>>
>> For instance, I have:
>>
>> url1 = 'http://www.url.com'
>> url2 = 'http://www.url.com/page'
>>
>> If part of url1 is in url2, like above, I'd like to declare it a
>> match. I'm sure this happens using a regular expression, but my
>> experience is limited with them.
>>
>> The other problem is that I'm not going to be looking for just one
>> url1, but I have an entire database table full of those to compare to
>> an entire database table of url2.
>>
>> Any thoughts on approaching this problem are appreciated.
> 
> It's not a complete answer, but in case it helps: String has an
> include? method:
> 
>   url2.include?(url1) => true

Using String#include? is much faster then regexp matching. Here are some
benchmarks. I didn't test this with Oniguruma though, but I su

-- START CODE --
require 'benchmark'

url = "http://www.url.com/"
url2 = "http://www.url.com/page"

Benchmark.bm{ |x|
	x.report{ 100000.times { url2.include?( url ) } }
	x.report{ 100000.times { url2 =~ /#{url}/ } }
}
-- END CODE ---


Benchmark Windows ruby 1.8.4 (2005-12-24) [i386-mswin32]
C:\source\projects\ruby\strings>ruby temp.rb
      user     system      total        real
  0.080000   0.000000   0.080000 (  0.080000)
  1.722000   0.130000   1.852000 (  1.873000)


Benchmark Linux ruby 1.8.4 (2005-12-24) [i686-linux]
zdennis@lima:~$ ruby-1.8.4 temp.rb
      user     system      total        real
  0.100000   0.000000   0.100000 (  0.119403)
  1.570000   0.040000   1.610000 (  1.760446)


Benchmark Linux ruby 1.8.3 (2005-06-23) [i486-linux]
zdennis@lima:~$ ruby temp.rb
      user     system      total        real
  0.160000   0.030000   0.190000 (  0.209436)
  1.720000   0.080000   1.800000 (  2.021754)


Benchmark Linux ruby 1.8.2 (2005-04-11) [i386-linux]
zdennis@jboss:~$ ruby temp.rb
      user     system      total        real
  0.000000   0.000000   0.000000 (  0.246239)
  0.000000   0.000000   0.000000 (  1.401049)


Zach