gli operatori delle espressioni sono "greedy" ovvero sono golosi e fanno il match con tutto quello che trovano (cioè di default hanno un lookahead più ampio possibile)
se togli il punto interrogativo e hai una stringa di quel tipo
anzichè ottenere "xyz" avresti ottenuto (credo) "xyz</div>"
perchè l'operatore * avrebbe fatto match finchè gli era possibile
In quel caso il ? rende l'operatore universale "ungreedy" ovvero ne modifica il comportamento.