For example, if you want to search for string consisting of all a's followed by all b's and then reverse it.
aaaaaabbb -> bbbaaaaaa
:s/\(a+\)\(b+\)/\=submatch(2).submatch(1)/ \(regexp\) defines an atom in vim. So the first atom is defined as a* and the second is defined as b*. In the replace pattern we are executing a vim expression. submatch(0) stands for the entire matched pattern where as submatch(1), submatch(2) stands for the strings matched by first atom, second atom etc.So the above vim command reverses the order of a's and b's. Having a vim expression as a replace pattern gives enormous power and can be used for much more complex things :-)