Foros del Web » Programando para Internet » PHP »

Problema con expresion regular

Estas en el tema de Problema con expresion regular en el foro de PHP en Foros del Web. Buenas, Para testear mi expresion regular utilizo la herramienta online http://www.rubular.com/ Y en con ella me funciona la expresión regular sin embargo, cuando la ejecuto ...
  #1 (permalink)  
Antiguo 19/07/2010, 15:12
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Problema con expresion regular

Buenas,

Para testear mi expresion regular utilizo la herramienta online
http://www.rubular.com/

Y en con ella me funciona la expresión regular sin embargo, cuando la ejecuto en el servidor no. He ido depurando hasta encontrar la parte que falla


Código PHP:
Ver original
  1. $parser='|<div class="smallplanet">\s*<a href="(.*?)"\s*.*?\s*.*?\((.*?)\)

Hasta aquí bien, luego continua y esto es lo que no coincide en la web, sin embargo en "rubular.com" si...

Código PHP:
Ver original
  1. .*\s*.*?\s*.*\s*?<span class="planet-name">(.*?)<\/span>\s*<span class="planet-koords">(.*?)<\/span>|is';


Fragmento:


Deberia recopilar la URL, el nombre, las coordenadas


Código:
<div id="myPlanets">

<div id="countColonies">    
    <p class="textCenter tipsStandard" title="|Número de posibles planetas">
        <span>6/6</span> Planetas    </p>    
</div>

	    <div class="smallplanet">

             <a href="#"
           	class="planetlink active tipsStandard"
            title="|<B> [4:177:12]</B><BR>12.800km (130/163)<BR>de -44 °C  a -4 °C">
     			<img class="planetPic" src="img/planets/gas_10_1.gif"/>
        	<span class="planet-name">Planet 51</span>
        	<span class="planet-koords">[4:177:12]</span>
         </a>
    		    </div>
	    <div class="smallplanet">
             <a href="index.php?page=overview&session=075b2138c130&cp=33814998"
      	   title="|<B> [4:177:8]</B><BR>14.755km (137/217)<BR>de 5 °C  a 45 °C"
           class="planetlink  tipsStandard">

     			<img class="planetPic" src="img/planets/water_6_1.gif"/>
        	<span class="planet-name">Planet Blue</span>
        	<span class="planet-koords">[4:177:8]</span>
         </a>
    		    </div>
	    <div class="smallplanet">
             <a href="index.php?page=overview&session=075b2138c130&cp=33823056"
      	   title="|<B> [4:196:6]</B><BR>13.879km (128/192)<BR>de 33 °C  a 73 °C"
           class="planetlink  tipsStandard">
     			<img class="planetPic" src="img/planets/normal_3_1.gif"/>

        	<span class="planet-name">Planet Polar</span>
        	<span class="planet-koords">[4:196:6]</span>
         </a>
    		    </div>
	    <div class="smallplanet">
             <a href="index.php?page=overview&session=075b2138c130&cp=33829871"
      	   title="|<B> [4:179:5]</B><BR>13.808km (125/190)<BR>de 60 °C  a 100 °C"
           class="planetlink  tipsStandard">
     			<img class="planetPic" src="img/planets/normal_5_1.gif"/>
        	<span class="planet-name">Planet Hot</span>

        	<span class="planet-koords">[4:179:5]</span>
         </a>
    		    </div>
	    <div class="smallplanet">
             <a href="index.php?page=overview&session=075b2138c130&cp=33883905"
      	   title="|<B> [3:350:4]</B><BR>12.548km (113/157)<BR>de 67 °C  a 107 °C"
           class="planetlink  tipsStandard">
     			<img class="planetPic" src="img/planets/dry_5_1.gif"/>
        	<span class="planet-name">Planet Dark</span>
        	<span class="planet-koords">[3:350:4]</span>

         </a>
    		    </div>
	    <div class="smallplanet">
             <a href="index.php?page=overview&session=075b2138c130&cp=33909388"
      	   title="|<B> [7:290:5]</B><BR>13.629km (102/185)<BR>de 26 °C  a 66 °C"
           class="planetlink  tipsStandard">
     			<img class="planetPic" src="img/planets/dry_6_1.gif"/>
        	<span class="planet-name">Planet Moon</span>
        	<span class="planet-koords">[7:290:5]</span>
         </a>

    		    </div>
</div>
</div></div>

Resultado deseado, el que ofrece rubular


Result 1

1. #
2. 130/163
3. Planet 51
4. [4:177:12]

Result 2

1. index.php?page=overview&session=075b2138c130&cp=33 814998
2. 137/217
3. Planet Blue
4. [4:177:8]

Result 3

1. index.php?page=overview&session=075b2138c130&cp=33 823056
2. 128/192
3. Planet Polar
4. [4:196:6]

Result 4

1. index.php?page=overview&session=075b2138c130&cp=33 829871
2. 125/190
3. Planet Hot
4. [4:179:5]

Result 5

1. index.php?page=overview&session=075b2138c130&cp=33 883905
2. 113/157
3. Planet Dark
4. [3:350:4]

Result 6

1. index.php?page=overview&session=075b2138c130&cp=33 909388
2. 102/185
3. Planet Moon
4. [7:290:5]



Sabéis por qué falla cuando lo ejecuto? yo creo que es esta parte la que no le gusta...

.*\s*.*?\s*.*\s*?<span class="planet-name">(.*?)<\/span>\s*<span class="planet-koords">(.*?)<\/span>


Podéis ayudarme?

Muchas gracias de antemano!
  #2 (permalink)  
Antiguo 19/07/2010, 15:25
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: Problema con expresion regular

Quizas me equivoco pero si estas encapsulando en | entonces no hay necesidad de escapar las barras. o si?

Respecto a esto, por que insistir tanto? .*\s*.*?\s*.*\s*?

No bastaría con esto? .*?

De hecho estás poniendo un modificardor s cuando termina la expresion. No se, yo a veces uso expresiones regulares pero no soy conocedor.
  #3 (permalink)  
Antiguo 19/07/2010, 15:25
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema con expresion regular

recuerda que usar .*? puede resultar muy codicioso...

en una expresión es mejor decir: lo que si puede ser, o todo lo que no puede ser...

osea, que deberías evitar la mayoría del tiempo usar comodines de ese tipo... y en su defecto, usar grupo que solo consideren los caracteres posibles... mas no todos los posibles, que no es lo mismo!!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 19/07/2010, 15:57
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Problema con expresion regular

Cita:
Iniciado por mayid Ver Mensaje
Quizas me equivoco pero si estas encapsulando en | entonces no hay necesidad de escapar las barras. o si?

Respecto a esto, por que insistir tanto? .*\s*.*?\s*.*\s*?

No bastaría con esto? .*?

De hecho estás poniendo un modificardor s cuando termina la expresion. No se, yo a veces uso expresiones regulares pero no soy conocedor.
Respecto a escapar las barras, es cierto, da igual que las escapes o no ya que el modificador son tuberias |

Y a lo de insistir tanto es porque me baso en la herramienta online, que te va mostrando que elementos estás seleccionando segun vas aplicando tu expresión regular... y si no lo hacia así no me marcaba todo hasta .*\s*.*?\s*.*\s*?<span class="planet-name">


Cita:
Iniciado por pateketrueke

recuerda que usar .*? puede resultar muy codicioso...

en una expresión es mejor decir: lo que si puede ser, o todo lo que no puede ser...

osea, que deberías evitar la mayoría del tiempo usar comodines de ese tipo... y en su defecto, usar grupo que solo consideren los caracteres posibles... mas no todos los posibles, que no es lo mismo!!
Es muy codicioso pero últimamente estoy teniendo unos problemas tremendo para seleccionar hasta el siguiente dato útil.

Sin ir más lejos, otro ejemplo:

Para seleccionar estos 3 valores:
205.502
83.521
22.984

Necesito emplear 3 expresiones
Código PHP:
Ver original
  1. <span id="resources_metal" class="">\s*(.*?)<\/span>
  2. <span id="resources_crystal" class="">\s*(.*?)<\/span>
  3. <span id="resources_deuterium" class="">\s*(.*?)<\/span>

porque soy incapaz de conseguirlo con una sola, aun empleando métodos codiciosos como .*? O_O!! no lo entiendo, bueno si, lo que veo es que el método .*? no pilla los espacios en blanco no? al menos no en la página de rubular.com :S

Código:
                    <span class="value">
                        <span id="resources_metal" class="">
                            205.502                   </span>
                   </span>
            </li>
        	<li id="crystal_box" class="crystal tipsStandard"
            	title="|<B>Cristal:</B> <br><span class=''>83.521/865.000</span><br><span class='undermark'>(+3.118)</span>">
                <img src="/game/img/layout/ressourcen_kristal.gif" />
                <span class="value">

                    <span id="resources_crystal" class="">
                        83.521                </span>
                </span>
            </li>
        	<li id="deuterium_box" class="deuterium tipsStandard"
            	title="|<B>Deuterio:</B> <br><span class=''>22.984/255.000</span><br><span class='undermark'>(+912)</span>">
                <img src="/game/img/layout/ressourcen_deuterium.gif" />
                <span class="value">
                	<span id="resources_deuterium" class="">

                        22.984               	</span>
               	</span>
            </li>
        	<li id="energy_box"
Es posible?

Muchas gracias de antemano!
  #5 (permalink)  
Antiguo 19/07/2010, 16:06
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema con expresion regular

ese es tu problema, pensar que .*? solo pillas espacios o no, para eso hay referencias...
- http://www.forosdelweb.com/f18/aport...s-pcre-646110/

el punto . es un meta-carácter que significa cualquier cosa, mas el cuantificador * ya significa bastante...

un ejemplo sencillo, no usar (.*?) mejor usa ([^<>]*) cuando el dato este entre tags HTML, lo cual significa "cualquier cosa menos <>" lo cual ya cubre la mayoría de caracteres posibles, excepto si es el cierre de etiqueta, etc...

debes cambiar tu visión al respecto, y solo usar .*? cuando sepas realmente lo que consigues con ello, la diferencia de tu herramienta para probar expresiones quizá sea un versión de PCRE distinta, o mejor, no es bueno que te bases en herramientas que no son compatibles con las librerías nativas de PHP...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 19/07/2010, 16:11
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Problema con expresion regular

descarga el regex buddy.. recomendado por un fanático de las regex ;D
Cita:
y solo usar .*? cuando sepas realmente lo que consigues con ello
+1

aunque con el "?" le quitas la codicia en todo caso.. así que [^>]* y .*?> harían lo mismo.. (excepto que uses algún modificador :P)
__________________
More about me...
~ @rhyudek1
~ Github
  #7 (permalink)  
Antiguo 20/07/2010, 00:20
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Problema con expresion regular

Cita:
Iniciado por Hidek1 Ver Mensaje
descarga el regex buddy.. recomendado por un fanático de las regex ;D

+1

aunque con el "?" le quitas la codicia en todo caso.. así que [^>]* y .*?> harían lo mismo.. (excepto que uses algún modificador :P)
Me bajé el RegexBuddy lo probaré y os cuento mis hallazgos :D

Gracias.
  #8 (permalink)  
Antiguo 20/07/2010, 13:30
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Problema con expresion regular

Cita:
Iniciado por neodani Ver Mensaje
Me bajé el RegexBuddy lo probaré y os cuento mis hallazgos :D

Gracias.
Donde va a parar! con el RegexBuddy si que respeta las expresiones y .* te marca todo no como en la página de rubular que jugaba conmigo al despiste.

Muchas gracias por esta herramienta tan útil. Ahora tengo un punto a favor para luchar contra las regular expresions
  #9 (permalink)  
Antiguo 20/07/2010, 13:52
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Problema con expresion regular

aparte de que trae las expresiones correctas para cada lenguaje, implementación, documentación, armado textual, etc =).. llame ya y además reciba de regalo... xD!
__________________
More about me...
~ @rhyudek1
~ Github
  #10 (permalink)  
Antiguo 20/07/2010, 13:56
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema con expresion regular

Cita:
Iniciado por Hidek1 Ver Mensaje
aparte de que trae las expresiones correctas para cada lenguaje, implementación, documentación, armado textual, etc =).. llame ya y además reciba de regalo... xD!
caray, la tentación me ha ganado... y yo también quiero mi regalo!!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

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 02:07.