\ban ASCII word boundary
Positive Lookahead(?=\w*?ha) \w*?any word character, repeated any number of times
hathe literal text ha (case sensitive) \w*any word character, repeated any number of times
athe literal a (9710 / 1418 / 6116) (case sensitive)
Negative Lookbehind(?<!h.) hthe literal h (10410 / 1508 / 6816) (case sensitive)
.any character (except for line terminators)
\w*any word character, repeated any number of times
g modifier: global. Finds all matches instead of stopping after the first
m modifier: multiline. Causes ^ and $ to match the start and end of each line, not only the start and end of the string