Just thought I'd explain the previous regexes a little. The ^ represents the start of the string with $ represents the end of the string. The .* (greedy) part will match as many characters it can before 'ed'. On the other hand a .*? is non-greedy and will match as few as possible characters, in this case zero, before 'ed'.
Also be sure to look at perldoc perlre.
Hope this helps a little more.