Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/03/2015, 04:42
jurassicboy
 
Fecha de Ingreso: agosto-2009
Mensajes: 91
Antigüedad: 14 años, 8 meses
Puntos: 2
Expresión regular compleja (regex).

Buenos días compañeros,

Ya casi he conseguido la expresión regular que quiero, pero necesito un empujoncillo para la parte que, por lo menos a mí, me parece más compleja. Os pongo en situación.

Tengo el siguiente código html guardado en un array llamado $filtered. Cada posición del array contiene la misma estructura html pero varían los datos, que a manera de ejemplo son los siguientes:


Código HTML:
<td>26/02/2015</td><td>09:00</td><td>26/02/2015</td><td>12:00</td><td>3</td><td>I1/121</td><td>10074 codification</td><td>103126 Codification, Cooperation and development - 11</td><td>Walter Shelter, Mary; Johnson Smith, Robert; Dickinson Queen, Patty</td><td>without group</td> 

La expresión regular la utilizo para tomar:

1 - Los valores de mes (26/02/2015). Con ellos hago una comprobación y si es >07 muestro un "1" y si es <=7 un "2". HECHO!


2 - El código de la tercera columna, formado por código-precódigo (103126-11). Simplemente lo guardo. HECHO!

3 - El primer apellido de todas las personas que están separadas por ";" en la penúltima columna.

Y en el apartado 3 está el problema, no consigo coger más que el primer apellido de la primera persona cuando lo que busco es coger el primer apellido de todas las personas que hay en esa columna.


Aquí el código del regex:
Código PHP:
Ver original
  1. $nodup_filtertoexec = preg_match('/\d{2}\/(\d{2})\/\d{4}.*?\d+\s.*?(\d+)\s.*?-\s(\d+).*?(?:.*?<td>){1}([a-zA-ZñÑ]+).*/m', $filtered, $matches);

Y aquí lo que quiero mostrar por pantalla:

2 103126-11 Walter Johnson Dickinson



Para facilitároslo visualmente podéis ver el código y los valores tomados hasta el momento marcados con colores en:

https://regex101.com/r/oQ1fJ1/2

Muchas gracias de antemano por vuestro tiempo y ayuda!!