Another way to approach this, right off the bat, is to βshiftβ the transfer this way:
hyphenated|h(-\s*\n\s*)yphenated|hy(-\s*\n\s*)phenated|hyp(-\s*\n\s*)henated|hyph(-\s*\n\s*)enated|hyphe(-\s*\n\s*)nated|hyphen(-\s*\n\s*)ated|hyphena(-\s*\n\s*)ted|hyphenat(-\s*\n\s*)ed|hyphenate(-\s*\n\s*)d
It reads better, but I really don't know how much this matches the performance of your original template.
Another idea is to narrow the search first using a pattern along these lines:
h[hypenatd]{0,9}(-\s*\n*\s)?[hypenatd]{0,9}
and then match in the results of this.
In fact, if I'm not mistaken, if you agree with such groups:
(h[hypenatd]{0,9})(?:-\s*\n*\s)?([hypenatd]{0,9})
then occurrences of the word hyphenated are all matches, where, in pseudocode:
(match.group1 + match.group2) == "hyphenated"
source share