I understand ^ starts the code and $ ends it...why is $ in a bracket and ^ is not?
It looks like a bug. The closing bracket should not be there after the $.
Why is there a \ in front of a (.) and a (-)? Does that escape it?..from what?
A '.' matches any character, so it needs to be escaped in this case. A '-' can be used to denote a range, so it often needs to be escaped.
Due to the bug you discovered, it should not be returning false.
That said, I suggest you use the PCRE regex functions instead. The PCRE alternative for eregi() is [man]preg_match/man with the i modifier. Also, I suggest that regex patterns be written as single quote delimited strings, not double quote delimited strings. Using single quote delimited strings reduces the amount of additional escaping that needs to be done.