Necesito encontrar todos los links que incluyan <h2> o <h3> dentro.
 
Tengo esto, que funciona casi perfectamente. Digo casi, porque hay tres link sin subtitulos que se filtran: 
$patron = '/<a(.*)><h[32]>(.*)<\/h[32]>.*<\/a>/isU';  
Lo que esta pasando con ese filtro es que se seleccionan, aunque no siempre, estas estructuras:  
 Cita:  <a href="http://www.artofillusion.org">www.artofillusion.org</a><br><a href="textures.html"><strong><h2>5.1 Textures</h2></strong></a>
    Es decir, la primera etiqueta siente que tiene que encontrar un sibtitulo sí o sí, y se come a la segunda etiqueta (hace lo que marco en rojo). 
Esto no debería pasar, porque tengo el modificador /U (de codicia). Sin embargo, sucede con solo 3 o 4 links de los 40 que tengo!. Y no veo por qué. 
Me parece que el problema esta en el primer selector: 
<a(.*)>  
Lo que necesito es negar que dentro de (.*) exista la cadena </a> 
Y ya he intentado mil cosas, pero no funcionan: <a([^>]?)>