# A case of catastrophic backtracking in Ruby#---------------------------------------------# example provided by Daniel Baldwin## # regex: (a?){n} a{n}# strings: aa...## run on the command line with:## $> ruby catastrophic.rb#nums = (1..1000)#iterate through the nums 1-1000nums.each do |i| start_time = Time.now string = "a" * i #create a new regular expression based on current value of i re_str = "a?" * i + "+" + "a" * i re = Regexp.new(re_str) re.match(string) #if re.match(string) # puts "matched string a * #{i} with regex #{re}" #else # puts "unmatched string a * #{i} with regex #{re}" #end puts "#{i} %.5f" % (Time.now - start_time)end