Hi!
Ich weiss zwar nicht (und kann's momentan auch nicht ausprobieren) ob .*? langsamer ist als [^x]* aber alternativ zu deinen .*? kannst du ja auch nach dem nicht-Vorkommen eines bestimmten Zeichens abfragen:
statt:
<h2.*?><a.*?name="m([0-9]+)">((.*?))...etc..
<h2[^>]*><a[^>]+name="m([0-9]+)">(([^)]*))...etc..
mfG
brand