Perl regex, 2424 69
^(.(.+)(?=\2{$a=$+})(.$|(??{"\Q$a"})(?{$a=substr$a,1}))*(?(?{''eq$a})$|(*F))
Obviously not a genuine CS regular expression, but those modern recursive regexes can work wondersbut those modern recursive regexes can work wonders and the edited (but fixed) version is not that short at all. I'm starting to wonder if actual Perl code, with the ability to reverse the starting string, wouldn't be shorter than that.