Where they shine is where you have a definition for a string that is well defined and straightforward, so you can both (a) verify that a piece of input matches the pattern and (b) extract all the parts of the pattern from that input, in a single regex operation.
For instance, just the other day I needed to deal with certain codes than consisted of two single-letter identifiers (one of which had three options, the other could be any alpha), a date, and then a two digit number, like this: MR_20110508_01
One straightforward regex with 4 named groups enabled me to do a single call which both checked that an incoming code was valid, and gave me 4 named groups that I could access to pull out the 4 pieces.
The more arbitrary content the target of the regex can contain, or the more rules that depend on other parts of the content, the more likely you are to be heading into Jamie Zawinski's "now you have two problems" hell.