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. Hola, Tengo un problemilla con una expresion regular. Busco en la cadena esto: Una cadena que empiece por cualquier caracter Seguido del caracter & Seguido ...
  #1 (permalink)  
Antiguo 18/01/2006, 06:07
Avatar de elangelcaido  
Fecha de Ingreso: septiembre-2003
Ubicación: Oviedo
Mensajes: 1.068
Antigüedad: 14 años, 3 meses
Puntos: 4
Problema con expresion regular

Hola,

Tengo un problemilla con una expresion regular. Busco en la cadena esto:

Una cadena que empiece por cualquier caracter
Seguido del caracter &
Seguido del conjunto ord
Seguido del caracter =
Seguido de cuaquier conjunto de letras minusculas
Seguido del caracter &
Seguido del conjunto orden
Seguido del caracter =
Seguido del numero -1 ó 0 ó 1

Código PHP:
echo ereg(".&?(ord)=?([a-z])&?(orden)=?[-1|0|1]","sid=54654654654&ord=nombre&orden=1")?"bien":"mal"
Siempre me dice MAL.

¿Alguien me peude ayudar?
__________________
Ta Luego! Al final sólo puede quedar uno...
________
lukos.org
  #2 (permalink)  
Antiguo 18/01/2006, 07:16
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 14 años, 6 meses
Puntos: 2
intenta escapando las \&, ademas no se si un "conjunto de letras minusculas" esta bien representado con [a-z].. esto (por lo que tengo entendido) es SOLO 1 letra.. deberia ser [a-z]{1,10}, para que haya desde 1 hasta 10 letras en ese sector de la cadena..., ademas sid=54654654654&ord=nombre&orden=1... ahi no comienza con cualquier caracter y sigue la &... si no que comienza con un GRUPO de caracteres y luego si esta la &..., si "sid=" esta siempre en la expresion ponelo tal cual...

Código PHP:
<?php
if(eregi("^.{4}[0-9]{11}(&ord=)[a-z]*(&orden=)(-1|1|0)$","sid=54654654654&ord=nombre&orden=1")) {
echo 
'ok';
}
else { echo 
'error'; }
?>
Esa la probe y funciona OK, fijate si te sirve, la explico:

La cadena comienza con 4 caractes cualquiera
^.{4}
luego contiene 11 numeros
[0-9]{11}
luego contiene la cadena de texto &ord=
(&ord=)
le sige 1 o más letras en minuscula
[a-z]*
luego el grupo de caracteres &orden=
(&orden=)
y debe terminar con un -1, 1 o 0...
(-1|1|0)$

Salute.
__________________
I Love Programming...
  #3 (permalink)  
Antiguo 20/01/2006, 04:56
Avatar de elangelcaido  
Fecha de Ingreso: septiembre-2003
Ubicación: Oviedo
Mensajes: 1.068
Antigüedad: 14 años, 3 meses
Puntos: 4
De acuerdo

Gracias FuLaNo_, era lo que necesitaba, es que aun no me defiendo bien con las expresiones regulares.
__________________
Ta Luego! Al final sólo puede quedar uno...
________
lukos.org
  #4 (permalink)  
Antiguo 20/01/2006, 05:01
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 14 años, 6 meses
Puntos: 2
a bueno, no te creas que yo se mucho... es mas, para que me funcione la tuve que retocar varias veces... y seguramente hay una forma mas "optima" de hacerlo...
__________________
I Love Programming...
  #5 (permalink)  
Antiguo 20/01/2006, 05:41
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 13 años
Puntos: 1
Información Ahí les va otra...

Esta es otra opción. Incluso captura las variables que te interesan en $v[1] y $v[2] para probar si funcionó. Se apega al contenido de tu cita siguiente:

Cita:
Tengo un problemilla con una expresion regular. Busco en la cadena esto:

Una cadena que empiece por cualquier caracter
Seguido del caracter &
Seguido del conjunto ord
Seguido del caracter =
Seguido de cuaquier conjunto de letras minusculas
Seguido del caracter &
Seguido del conjunto orden
Seguido del caracter =
Seguido del numero -1 ó 0 ó 1
Código PHP:
<?php
$url
="sid=54654654654&ord=nombre&orden=1";
$patron="ord=([a-z]+)&orden=(-1|0|1)$";

if(
eregi($patron,$url,$v)) {
   echo 
$v[1]."<br/>"//imprime: nombre
   
echo $v[2]."<br/>"//imprime: 1
   
}
else { echo 
'error'; }
?>
Saludote !
  #6 (permalink)  
Antiguo 20/01/2006, 09:57
Avatar de elangelcaido  
Fecha de Ingreso: septiembre-2003
Ubicación: Oviedo
Mensajes: 1.068
Antigüedad: 14 años, 3 meses
Puntos: 4
Gracias, esto tambien me puede servir !!
__________________
Ta Luego! Al final sólo puede quedar uno...
________
lukos.org
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:11.