a look at a profile makes me suspect the problem is having pod_string_character match a single character at a time, causing rather large numbers of match objects for comparatively short strings.
It's probably worthwhile to steal a piece of implementation from "nibbling", aka parsing strings. a very short glance points do_nibbling out as interesting.