```Hi

I've experienced a rather strange problem with regular-expressions
recently. I used a RE to capture some input from a cisco-device, like:

1. Everything up to...   (.*)
2. ... Beginning of the prompt  'switch-123'
3. ... variable middle part of the prompt [a-zA-Z0-9_-]+
4. ...  And a '#' at the end of the prompt #

1___2__3_4
-->  /(.*)ABC.*#/

Except to one case this RE worked quite well:

| length = 20000
|
| # "x" * length + "ABC" + "y" * 10 + "#"
| -> matches immediately, return true
|
| # "x" * length + "XYZ" + "y" * 10 + "#"
| -> matches immediately, return false. Please note that the tag 'ABC'
| isn't in the string
|
| # "x" * length + "ABC" + "y" * 10
| -> takes forever (if LENGHT is big enough), as you can see here the tag
| 'ABC' occurred, but the ending of the second variable part hasn't.

After some experiments I could even simplify the problem:
LENGTH = 20000
text = "x" * LENGTH + "ABC" + "y" * 10
re = /(.*)ABC[y]#/
-> takes forever...

I'm not sure if this is a problem of the ruby RE-implementation
or if this a problem of RE in general (Keyword: back-tracking). Some
tests with Perl showed to me that Perl usually reacts better to such
regular-expressions.

Attached is a short test-program.

Regards,
Reto Sch?ttel
LENGTH = 20000

var1 = "x" * LENGTH + "ABC" + "y" * 10 + "#"
var2 = "x" * LENGTH + "XYZ" + "y" * 10
var3 = "x" * LENGTH + "ABC" + "y" * 10

re = /(.*)ABC.*#/

[var1, var2, var3].each do |text|
puts re =~ text ? "true" : "false"
end

```