You've split the regex up wrong (the + quantifiers apply to the items which preceed them, not the items after them), and given incorrect descriptions for some parts.
:/
code:
^ # start of input
[\w-\.]+ # incorrect syntax. It should be [\w\-.]+
# since - needs escaping inside a char class, and . doesn't.
# Matches a single alphanumeric, underscore, hyphen, or dot.
# The + says "as many as possible, but at least one"
@ # a literal @ sign
( # begin a capturing group
# though should be a non-capturing group
# but syntax is slightly more complex (?: ... ) vs ( ... )
[\w-]+ # this time the syntax _might_ work; some regex engines
# will auto-escape hyphen if it's the last character, but if someone
# that doesn't know regex might put another char afterwards,
# it's always recommended to manually escape hyphen, to
# avoid inadvertently creating an unwanted range.
\. # since this . is outside the class it's been escaped.
)+ # end the capturing group.
# match the pattern inside the group as many times as
# possible, at least once.
[\w-]{2,4} # as above, but this time match 4 characters, at least 2.
# this is not recommended for emails because
# it will break for emails that end in .museum and similar
# and also for numerical IP addresses ending in a single digit
# and it allows things like ___ or --- which are not valid emails
$ # end of input
EDITED: 31 Oct 2011 14:19 by BOUGHTONP