Foros del Web » Programación para mayores de 30 ;) » RegExp »

[SOLUCIONADO] expresion regular

Estas en el tema de expresion regular en el foro de RegExp en Foros del Web. Tengo problemas para formular una expresion regular para encontrar los numeros entre 25 y 55 hice algo como esto pero no funciona, espero puedan ayudarme. ...
  #1 (permalink)  
Antiguo 03/07/2013, 08:55
 
Fecha de Ingreso: enero-2011
Ubicación: /root
Mensajes: 530
Antigüedad: 13 años, 3 meses
Puntos: 61
expresion regular

Tengo problemas para formular una expresion regular para encontrar los numeros entre 25 y 55 hice algo como esto pero no funciona, espero puedan ayudarme.

Código PHP:
Ver original
  1. /([2-5][5-5])/



Saludos
  #2 (permalink)  
Antiguo 03/07/2013, 08:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: expresion regular

¿que es en sí lo que quieres hacer? ¿encontrar números en una cadena de texto? ¿o ver si el número que te pasan esta entre 25 y 55?
  #3 (permalink)  
Antiguo 03/07/2013, 09:02
 
Fecha de Ingreso: enero-2011
Ubicación: /root
Mensajes: 530
Antigüedad: 13 años, 3 meses
Puntos: 61
Respuesta: expresion regular

gracias lo solucione :)

la solucion:

Código PHP:
Ver original
  1. ^[2-5]?[5-5]$


Saludos,
  #4 (permalink)  
Antiguo 03/07/2013, 09:14
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: expresion regular

Esa expresión está mal, no captura números entre el 25 y 55.

Aquí las pruebas:
Código PHP:
Ver original
  1. $test = range(0, 99);
  2. $regex = '/^[2-5]?[5-5]$/';
  3.  
  4. foreach ($test as $num) {
  5.     if (preg_match($regex, $num)) {
  6.         echo "=> $num PASS!\n";
  7.     }
  8. }

Y los resultados:
Cita:
=> 5 PASS!
=> 25 PASS!
=> 35 PASS!
=> 45 PASS!
=> 55 PASS!
Como puedes verificar, tu expresión es pésima y por lo tanto no es una solución ni de lejos.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 03/07/2013, 09:21
 
Fecha de Ingreso: enero-2011
Ubicación: /root
Mensajes: 530
Antigüedad: 13 años, 3 meses
Puntos: 61
Respuesta: expresion regular

Necesito ver que el numero que me pasan esta entre 25 y 55 , no logro hacerla.

Saludos
  #6 (permalink)  
Antiguo 03/07/2013, 09:24
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: expresion regular

Según mi punto de vista es un desperdicio usar una expresión regular aquí, no hace falta.

La misma comparación la consigues así:
Código PHP:
Ver original
  1. $test = range(0, 99);
  2.  
  3. foreach ($test as $num) {
  4.   if (($num >= 25) && ($num <= 55)) {
  5.     echo "=> $num PASS!\n";
  6.   }
  7. }

Y no hace falta desperdiciar recursos en una expresión regular que haga eso, te comento: la regla de oro de las expresiones regularese es que si ya hay algo que resuelva el problema sin necesitar expresiones regulares entonces no hacen falta, no las uses.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 03/07/2013, 09:25
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: expresion regular

Estaba por repetir lo que te dice Pate... lo que pasa es que estas colocando un RANGO en tu expresion al decir [2-5]... deberia ser algo asi:

/^[2|5]{1}[5]{1}$/

Código PHP:
<?php

$test 
range(099);
$regex '/^[2|5]{1}[5]{1}$/';
 
foreach (
$test as $num) {
    if (
preg_match($regex$num)) {
        echo 
"=> $num PASS!\n";
    }
}
Salida:

Cita:
=> 25 PASS!
=> 55 PASS!

Con [2|5] estas diciendo "2" o "5"
__________________
Salu2!
  #8 (permalink)  
Antiguo 03/07/2013, 09:29
 
Fecha de Ingreso: enero-2011
Ubicación: /root
Mensajes: 530
Antigüedad: 13 años, 3 meses
Puntos: 61
Respuesta: expresion regular

pateketrueque en mi caso no me sirve hacer la comparacion con php ya que la expresion es para un prefabricado, italico76 tu expresion no me funciona .

Saludos
  #9 (permalink)  
Antiguo 03/07/2013, 09:30
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: expresion regular

Esa expresión tampoco pasa, la cuestión es el rango de valores, siendo inclusivo.

Tu expresión sólo valida el 25 y 55, que sería lo mismo a: /^(?:25|55)$/

Así que no tiene mucho chiste.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 03/07/2013, 09:31
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: expresion regular

El CHISTE es que lei rapido y mal....y ENTENDI que queria 25 o 55
__________________
Salu2!
  #11 (permalink)  
Antiguo 03/07/2013, 09:31
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: expresion regular

Cita:
Iniciado por matt_1985 Ver Mensaje
pateketrueque en mi caso no me sirve hacer la comparacion con php ya que la expresion es para un prefabricado, italico76 tu expresion no me funciona .

Saludos
¿A que le llamas prefabricado y que relación tiene con una simple comparación?

No entiendo el contexto, pero si no hay otra forma entonces esperemos a que muevan el tema sl sub-foro de RegExp.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #12 (permalink)  
Antiguo 03/07/2013, 09:34
 
Fecha de Ingreso: enero-2011
Ubicación: /root
Mensajes: 530
Antigüedad: 13 años, 3 meses
Puntos: 61
Respuesta: expresion regular

italico ,

necesito validar que el numero sea entre 25 y 55.

saludos
  #13 (permalink)  
Antiguo 03/07/2013, 09:36
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: expresion regular

Cita:
Iniciado por matt_1985 Ver Mensaje
italico ,

necesito validar que el numero sea entre 25 y 55.
Pues eso esta dificil..... de 20 a 59 se puede facil asi '/^[2-5]{1}[0-9]{1}$/' pero de 25 a 55 tienes un problema y ni siquiera se si las expresiones regulares tiene tanto poder
__________________
Salu2!
  #14 (permalink)  
Antiguo 03/07/2013, 09:42
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: expresion regular

No es difícil, aunque sigo pensado que es innecesario.

Código PHP:
Ver original
  1. $test = range(0, 99);
  2. $regex = '/^(?:[3-4][0-9]|2[5-9]|5[0-5])$/';
  3.  
  4. foreach ($test as $num) {
  5.     if (preg_match($regex, $num)) {
  6.         echo "=> $num PASS!\n";
  7.     }
  8. }

La clave está en declarar varios tipos de rangos, ya que uno sólo no puede abarcar diferentes números a la vez.

Es decir, el primer rango a discriminar es un rango finito, del 30 al 49, debido a que el 25 y 55 son truncos y no pueden incluirse en dicho rango.

[3-4][0-9]

El segundo rango debe cubrir aquellos números mayores o iguales a 25, pero debajo del primer rango citado.

2[5-9]

El último rango cubre el restante de posibilidades, aquellos números menores o iguales a 55, pero fuera de los rangos iniciales.

5[0-5]

Finalmente se debe agrupar todo usando el operador OR (pipe o barra), para que compruebe todos los casos.

Imposible no es.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #15 (permalink)  
Antiguo 03/07/2013, 09:45
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: expresion regular

@pateketrueke: me quito el sombrero...... gracias

Creeria nuestro amigo ya soluciono
__________________
Salu2!
  #16 (permalink)  
Antiguo 03/07/2013, 11:03
 
Fecha de Ingreso: enero-2011
Ubicación: /root
Mensajes: 530
Antigüedad: 13 años, 3 meses
Puntos: 61
Respuesta: expresion regular

@pateketrueke , muchas gracias .

Etiquetas: expresion, php, 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 17:22.