Foros del Web » Programando para Internet » PHP »

Expresión regular específica

Estas en el tema de Expresión regular específica en el foro de PHP en Foros del Web. Pues resulta que tengo un problema que ya llevo tratando de resolver con una expresión regular. Tengo una tabla <table class="cast"> <tr class="odd"><td class="hs"><a href="/name/nm0000209/" ...
  #1 (permalink)  
Antiguo 29/09/2010, 14:52
 
Fecha de Ingreso: mayo-2008
Mensajes: 9
Antigüedad: 15 años, 10 meses
Puntos: 0
Expresión regular específica

Pues resulta que tengo un problema que ya llevo tratando de resolver con una expresión regular.

Tengo una tabla

<table class="cast"> <tr class="odd"><td class="hs"><a href="/name/nm0000209/" onClick="(new Image()).src='/rg/title-tease/tinyhead/images/b.gif?link=/name/nm0000209/';"><img src="http://ia.media-imdb.com/images/M/MV5BMTk5NTUxMDM1M15BMl5BanBnXkFtZTYwMTI0MDc0._V1._ SY30_SX23_.jpg" width="23" height="32" border="0"></a><br></td><td class="nm"><a href="/name/nm0000209/" onclick="(new Image()).src='/rg/castlist/position-1/images/b.gif?link=/name/nm0000209/';">Tim Robbins</a></td><td class="ddd"> ... </td><td class="char"><a href="/character/ch0001388/">Andy Dufresne</a></td></tr> <tr class="even"><td class="hs"><a href="/name/nm0000151/" onClick="(new Image()).src='/rg/title-tease/tinyhead/images/b.gif?link=/name/nm0000151/';"><img src="http://ia.media-imdb.com/images/M/MV5BMTMxMjUyODg3N15BMl5BanBnXkFtZTcwMTcxNjg5Mg@@._ V1._SY30_SX23_.jpg" width="23" height="32" border="0"></a><br></td><td class="nm"><a href="/name/nm0000151/" onclick="(new Image()).src='/rg/castlist/position-2/images/b.gif?link=/name/nm0000151/';">Morgan Freeman</a></td><td class="ddd"> ... </td><td class="char"><a href="/character/ch0001387/">Ellis Boyd &#x27;Red&#x27; Redding</a></td></tr> <tr class="odd"><td class="hs"><a href="/name/nm0348409/" onClick="(new Image()).src='/rg/title-tease/tinyhead/images/b.gif?link=/name/nm0348409/';"><img src="http://ia.media-imdb.com/images/M/MV5BMjA5MTYwMDUyN15BMl5BanBnXkFtZTcwODgxMjY3Mg@@._ V1._SY30_SX23_.jpg" width="23" height="32" border="0"></a><br></td><td class="nm"><a href="/name/nm0348409/" onclick="(new Image()).src='/rg/castlist/position-3/images/b.gif?link=/name/nm0348409/';">Bob Gunton</a></td><td class="ddd"> ... </td><td class="char"><a href="/character/ch0001391/">Warden Norton</a></td></tr> <tr class="even"><td class="hs"><a href="/name/nm0006669/" onClick="(new Image()).src='/rg/title-tease/tinyhead/images/b.gif?link=/name/nm0006669/';"><img src="http://ia.media-imdb.com/images/M/MV5BMTA1NjU3NDg1MTheQTJeQWpwZ15BbWU2MDI4OTcxMw@@._ V1._SY30_SX23_.jpg" width="23" height="32" border="0"></a><br></td><td class="nm"><a href="/name/nm0006669/" onclick="(new Image()).src='/rg/castlist/position-4/images/b.gif?link=/name/nm0006669/';">William Sadler</a></td><td class="ddd"> ... </td><td class="char"><a href="/character/ch0001390/">Heywood</a></td></tr> <tr class="odd"><td class="hs"><a href="/name/nm0000317/" onClick="(new Image()).src='/rg/title-tease/tinyhead/images/b.gif?link=/name/nm0000317/';"><img src="http://ia.media-imdb.com/images/M/MV5BODIyMjc3NTYxOF5BMl5BanBnXkFtZTcwMjk5NTUxMQ@@._ V1._SY30_SX23_.jpg" width="23" height="32" border="0"></a><br></td><td class="nm"><a href="/name/nm0000317/" onclick="(new Image()).src='/rg/castlist/position-5/images/b.gif?link=/name/nm0000317/';">Clancy Brown</a></td><td class="ddd"> ... </td><td class="char"><a href="/character/ch0001389/">Captain Hadley</a></td></tr> <tr class="even"><td class="hs"><a href="/name/nm0004743/" onClick="(new Image()).src='/rg/title-tease/tinyhead/images/b.gif?link=/name/nm0004743/';"><img src="http://ia.media-imdb.com/images/M/MV5BMjA1MDQxMDU4Nl5BMl5BanBnXkFtZTcwMTA2MTE3Mw@@._ V1._SY30_SX23_.jpg" width="23" height="32" border="0"></a><br></td><td class="nm"><a href="/name/nm0004743/" onclick="(new Image()).src='/rg/castlist/position-6/images/b.gif?link=/name/nm0004743/';">Gil Bellows</a></td><td class="ddd"> ... </td><td class="char"><a href="/character/ch0001392/">Tommy</a></td></tr> <tr class="odd"><td class="hs"><img src="http://i.media-imdb.com/images/b.gif" width="25" height="31" border="0"></td><td class="nm"><a href="/name/nm0001679/" onclick="(new Image()).src='/rg/castlist/position-7/images/b.gif?link=/name/nm0001679/';">Mark Rolston</a></td><td class="ddd"> ... </td><td class="char"><a href="/character/ch0028188/">Bogs Diamond</a></td></tr> <tr class="even"><td class="hs"><img src="http://i.media-imdb.com/images/b.gif" width="25" height="31" border="0"></td><td class="nm"><a href="/name/nm0926235/" onclick="(new Image()).src='/rg/castlist/position-8/images/b.gif?link=/name/nm0926235/';">James Whitmore</a></td><td class="ddd"> ... </td><td class="char"><a href="/character/ch0001393/">Brooks Hatlen</a></td></tr> <tr class="odd"><td class="hs"><img src="http://i.media-imdb.com/images/b.gif" width="25" height="31" border="0"></td><td class="nm"><a href="/name/nm0218810/" onclick="(new Image()).src='/rg/castlist/position-9/images/b.gif?link=/name/nm0218810/';">Jeffrey DeMunn</a></td><td class="ddd"> ... </td><td class="char"><a href="/character/ch0167693/">1946 D.A.</a></td></tr> <tr class="even"><td class="hs"><img src="http://i.media-imdb.com/images/b.gif" width="25" height="31" border="0"></td><td class="nm"><a href="/name/nm0104594/" onclick="(new Image()).src='/rg/castlist/position-10/images/b.gif?link=/name/nm0104594/';">Larry Brandenburg</a></td><td class="ddd"> ... </td><td class="char"><a href="/character/ch0061815/">Skeet</a></td></tr> <tr class="odd"><td class="hs"><img src="http://i.media-imdb.com/images/b.gif" width="25" height="31" border="0"></td><td class="nm"><a href="/name/nm0321358/" onclick="(new Image()).src='/rg/castlist/position-11/images/b.gif?link=/name/nm0321358/';">Neil Giuntoli</a></td><td class="ddd"> ... </td><td class="char"><a href="/character/ch0081814/">Jigger</a></td></tr> <tr class="even"><td class="hs"><img src="http://i.media-imdb.com/images/b.gif" width="25" height="31" border="0"></td><td class="nm"><a href="/name/nm0508742/" onclick="(new Image()).src='/rg/castlist/position-12/images/b.gif?link=/name/nm0508742/';">Brian Libby</a></td><td class="ddd"> ... </td><td class="char"><a href="/character/ch0001394/">Floyd</a></td></tr> <tr class="odd"><td class="hs"><a href="/name/nm0698998/" onClick="(new Image()).src='/rg/title-tease/tinyhead/images/b.gif?link=/name/nm0698998/';"><img src="http://ia.media-imdb.com/images/M/MV5BMjAxNjc4NDg2MF5BMl5BanBnXkFtZTcwNTA1NzE3MQ@@._ V1._SY30_SX23_.jpg" width="23" height="32" border="0"></a><br></td><td class="nm"><a href="/name/nm0698998/" onclick="(new Image()).src='/rg/castlist/position-13/images/b.gif?link=/name/nm0698998/';">David Proval</a></td><td class="ddd"> ... </td><td class="char"><a href="/character/ch0167694/">Snooze</a></td></tr> <tr class="even"><td class="hs"><a href="/name/nm0706555/" onClick="(new Image()).src='/rg/title-tease/tinyhead/images/b.gif?link=/name/nm0706555/';"><img src="http://ia.media-imdb.com/images/M/MV5BMzM3OTMwODc0NF5BMl5BanBnXkFtZTcwMjc4ODE5MQ@@._ V1._SY30_SX23_.jpg" width="23" height="32" border="0"></a><br></td><td class="nm"><a href="/name/nm0706555/" onclick="(new Image()).src='/rg/castlist/position-14/images/b.gif?link=/name/nm0706555/';">Joseph Ragno</a></td><td class="ddd"> ... </td><td class="char"><a href="/character/ch0167695/">Ernie</a></td></tr> <tr class="odd"><td class="hs"><a href="/name/nm0161980/" onClick="(new Image()).src='/rg/title-tease/tinyhead/images/b.gif?link=/name/nm0161980/';"><img src="http://ia.media-imdb.com/images/M/MV5BMjA4NDA4MzkzOV5BMl5BanBnXkFyZXN1bWU@._V1._SY30 _SX23_.jpg" width="23" height="32" border="0"></a><br></td><td class="nm"><a href="/name/nm0161980/" onclick="(new Image()).src='/rg/castlist/position-15/images/b.gif?link=/name/nm0161980/';">Jude Ciccolella</a></td><td class="ddd"> ... </td><td class="char"><a href="/character/ch0110690/">Guard Mert</a></td></tr></table>

Que como pueden ver tiene todos los rows en una sola linea. Si trato de hacer esto:

$actorRegexp = '/<td class\="nm"><a href\="\/name\/\w*\/" onclick\=".*">([a-zA-Z ]*)<\/a><\/td>?/is';
preg_match_all($actorRegexp, $table, $actorsMatchs);

Solo me obtiene el último nombre (en este caso Jude Ciccolella), esto por que al poner el .* en el "onclick" del link también ahí entra toooodo lo que sigue, aúnque ya no sea parte del link. He intentado hacer ahí [\w\/\=\'\?·\. ]* pero aún así no consigo obtener todos los nombres de los actores que están en ese link

Espero que me puedan ayudar
  #2 (permalink)  
Antiguo 29/09/2010, 14:56
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Expresión regular específica

eso es porque tu expresión es codiciosa... puedes cambiarla con el patrón modificador U (Ungreedy | No codicioso)
o agregándole un signo de interrogación luego del cuantificador
saludos.
__________________
More about me...
~ @rhyudek1
~ Github
  #3 (permalink)  
Antiguo 29/09/2010, 14:59
 
Fecha de Ingreso: mayo-2008
Mensajes: 9
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Expresión regular específica

=D Ya pude!!!

Me dieron la respuesta a través de vark.com
Con esa misma expresión regular quedó, solo fue necesario agregar ? después de cada *

Les dijo la respuesta que me dieron:

Cita:
It may have to do with greedy and non-greedy matching. try adding a ? after both of the *'s like this: '/<td class\="one"><a.*?>(.*?)<\/a><\/td>/'
Es un ejemplo pero ya haciéndolo en mi expresión funcionó.

Gracias a los que leyeron y pues si no sabían la respuesta, ahí'ta pa'l que la necesite

=D
  #4 (permalink)  
Antiguo 29/09/2010, 15:00
 
Fecha de Ingreso: mayo-2008
Mensajes: 9
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Expresión regular específica

Cita:
Iniciado por Hidek1 Ver Mensaje
eso es porque tu expresión es codiciosa... puedes cambiarla con el patrón modificador U (Ungreedy | No codicioso)
o agregándole un signo de interrogación luego del cuantificador
saludos.
Hay que codicioso soy vdd? jejeje. NTC es broma. ¿En donde iría el U?

Gracias!
  #5 (permalink)  
Antiguo 29/09/2010, 15:07
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Expresión regular específica

es un patrón modificador .. así que luego del delimitador...

/regex/U

eso voltea todas las codicias.. es decir .. te ahorras poner el ? en todos los .*

saludos.
__________________
More about me...
~ @rhyudek1
~ Github
  #6 (permalink)  
Antiguo 29/09/2010, 15:37
 
Fecha de Ingreso: mayo-2008
Mensajes: 9
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Expresión regular específica

Cita:
Iniciado por Hidek1 Ver Mensaje
es un patrón modificador .. así que luego del delimitador...

/regex/U

eso voltea todas las codicias.. es decir .. te ahorras poner el ? en todos los .*

saludos.
Muchas gracias por todo :)

Etiquetas: expresion, regular
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:29.