Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema con Expresion Regular

Estas en el tema de Problema con Expresion Regular en el foro de PHP en Foros del Web. Buenas amigos, estoy liado con una expresion regular y por mas que intento no doy, tengo el siguiente string: bak_Numeros Febrero 2013.xlsx y quiero crear ...
  #1 (permalink)  
Antiguo 12/03/2013, 16:50
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 8 meses
Puntos: 19
Pregunta Problema con Expresion Regular

Buenas amigos, estoy liado con una expresion regular y por mas que intento no doy, tengo el siguiente string:

bak_Numeros Febrero 2013.xlsx

y quiero crear una funcion para que solo me deje el mes (FEBRERO), es decir eliminar /BAK_,NUMEROS,DIGITO,.XLS,.XLSX) con php e hecho esto:

Código PHP:
Ver original
  1. $destino="bak_Numeros Febrero 2013.xlsx";
  2. echo preg_replace("/[(\\d)'numeros'(bak_)(.xls*)]/i","",$destino)."<br>";

pero me muestra F no me esta dejando el mes y nose como armarla no es mi fuerte el uso de expresiones regulares, alguien podria ayudarme?
  #2 (permalink)  
Antiguo 12/03/2013, 16:58
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Problema con Expresion Regular

Si realmente tiene ese formato ¿no sería más simple dividir por el espacio en blanco y tomar la posición 1 del arreglo resultante?

$cad="bak_Numeros Febrero 2013.xlsx";
$cad=explode(' ',$cad);
$mes=$cad[1];
  #3 (permalink)  
Antiguo 12/03/2013, 17:15
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

Estoy de acuerdo con la respuesta de ocp001a, el primer gran error de usar RegExp es que nublan la mente de quien piensa que son mas eficientes, fáciles o mejores, eso merma la capacidad de imaginar otras soluciones mucho más sencillas y practicas.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 13/03/2013, 07:45
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 8 meses
Puntos: 19
Respuesta: Problema con Expresion Regular

Bueno si tienes razon pero no siempre llevan el año, o suele no tener la palabra "Numeros" pero siempre es fijo que tienen el mes, por eso queria usar una RegExp para asegurarme de solo tener el mes, dentro del mismo tema, hace poco comente otro problema que tengo con otra expr reg del siguiente formato:

J-XXXXXXX-X (donde la X es un numero 0-9), arme esta funcion:

Código PHP:
Ver original
  1. function Rif_($rif)
  2. {
  3.     return (preg_match('/(j)(-)(\\d+)(-)(\\d)/is', $rif));
  4. }

pero me deja pasar mas de 8 digitos es decir: J-XXXXXXXXXXX... - X y quiero limitar a solo J-8 DIGITOS-1 DIGITO...
  #5 (permalink)  
Antiguo 13/03/2013, 08:05
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

¿Ven por qué digo que pensar así nubla la mente?

La idea detrás de las expresiones regulares es que también la lógica, y si piensas atacar el problema con un patrón complejo será una solución no muy inteligente.

En lugar de ser religioso con el patrón, ¿por qué no simplemente buscas si existe o no la palabra del mes en cuestión?

Código PHP:
$foo = array('candy''bar');
$bar 'fooo_Bazz Candy-does.nothing';

foreach (
$foo as $word) {
  
$regex "/$word/i";

  if (
preg_match($regex$bar)) {
    echo 
"LOL: $word";
  }

Las expresiones regulares son magnificas, pero no van a pensar por ti, ni van a resolver un problema que no has resuelto con la mente primero, formas hay muchas, y las expresiones también pueden ser negativas o positivas.

Hay expresiones que deben ser, pueden ser, podrían contener, pueden no ser, podrían no contener, no deberían contener, etc. La lista inmensa, otro ejemplo.

Código PHP:
$regex '/foo|candy|bar/i';
$bar 'fooo_Bazz Candy-does.nothing';

if (
preg_match($regex$bar$match)) {
  echo 
"LOL: $match[0]";

Para escribir expresiones regulares, como cualquier otro lenguaje, hay que pensar en expresiones regulares, son notación y no tecnología per se.

Si por ejemplo, fueras mi alumno, ya te hubiera hecho repetir el curso por el simple hecho de usar expresiones regulares en lugar de hacer esto.

Código PHP:
$meses = array('enero''febrero''...');
$destino 'bak_Numeros Febrero 2013.xlsx';
$test strtolower($destino);

foreach (
$meses as $mes) {
  if (
strpos($destino$test) !== FALSE) {
    echo 
"El mes es: $mes";
  }

Fácil, sencillo y creativo.

Además de óptimo, pues gasta mucho menos recursos, aunque no lo creas, que las expresiones regulares.

Antes de comenzar con expresiones regulares deberías mejorar tu capacidad cognitiva y creativa, no son un primer recurso, son herramientas de doble filo, y hay que usarlas sabiamente y con cuidado.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 13/03/2013, 10:04
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 8 meses
Puntos: 19
Respuesta: Problema con Expresion Regular

Bueno como lo especifique no soy muy bueno con las expresiones regulares me cuesta mucho usarlas (armarlas) y con la otra expresión me podrías ayudar?
  #7 (permalink)  
Antiguo 13/03/2013, 11:32
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

¿Cual otra?

No necesitas ninguna expresión regular para resolver tu problema, ese es mi punto.

Ahora, que si quieres aprender expresiones regulares pues es a parte, pero el esfuerzo debe ser tuyo, no mio.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 13/03/2013, 11:33
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 8 meses
Puntos: 19
Respuesta: Problema con Expresion Regular

Cita:
Iniciado por JuJoGuAl Ver Mensaje
Bueno si tienes razon pero no siempre llevan el año, o suele no tener la palabra "Numeros" pero siempre es fijo que tienen el mes, por eso queria usar una RegExp para asegurarme de solo tener el mes, dentro del mismo tema, hace poco comente otro problema que tengo con otra expr reg del siguiente formato:

J-XXXXXXX-X (donde la X es un numero 0-9), arme esta funcion:

Código PHP:
Ver original
  1. function Rif_($rif)
  2. {
  3.     return (preg_match('/(j)(-)(\\d+)(-)(\\d)/is', $rif));
  4. }

pero me deja pasar mas de 8 digitos es decir: J-XXXXXXXXXXX... - X y quiero limitar a solo J-8 DIGITOS-1 DIGITO...
Esta... yo no e dicho que me enseñes o algo por el estilo, dije que me cuestan pero de igual manera hago mi esfuerzo...
  #9 (permalink)  
Antiguo 13/03/2013, 11:36
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

Lo que te trato de decir es que RegExp es un lenguaje completamente diferente, por ende debes aprenderlo como cualquier otro, desde sus cimientos.

Si el tema era resolver un problema con RegExp + PHP, entonces yo daría por resuelto el tema, si el objetivo es aprender RegExp entonces pido a un moderador mueva el tema al sub-foro de RegExp.

__________________
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 17:55.