(.*) va vouloir récupérer le maximum de caractère donc dans ton cas, il va prendre du premier <a> jusqu'au dernier </a>.
Tu peux sois faire à la place (.*?) ce qui va inciter à prendre le moins possible de caractères, mais si tu sais qu'il n'y aura aucune autre balises entre un <a> et un </a> (autre que <a> donc), je te conseille de faire ([^<]*) ce qui essayera de prendre le maximum de caractère sans '<' ce qui correspondrait au début d'une autre balise.