This is not a bug. This is one of the quirks of regex engines. I've mentioned it before in another bug report
QUOTE (ptrk.mj @ Apr 24 2011, 21:51)
As I explained in the first post regex engines apart from matching at each character offset (...) also try to match a pattern at an offset behind the last character (i.e. match a pattern against void at the end of the string) (...)
1. .* matches the whole string (start of the match at offset 0).
2. Match ("test") is captured into first backreference.
3. Match is replaced with '$1 oops' so that "test" becomes "test oops".
4. .* matches void after the string (start of match at offset 1, zero-width match). Star makes the dot optional
so that the pattern can match here!
5. Match ("") is captured into first backreference. That's right! The first backreference exists
and simply holds nothingness
6. Match is replaced with '$1 oops' so that "" becomes " oops"
After all, our input string "test" becomes "test oops oops".