Estás mirando la versión 3 de mi sitio web, para ver la última versión por favor anda a juque.cl

juque

Juan Pablo Aqueveque: Ingeniero de Sistemas, Diseñador y Desarrollador Web que reside en Temuco, Chile.

PHP: Separando una cadena

Publicado por Juan Pablo el 20.Jun.2006 | Comentarios (6)

Me gustan mucho las expresiones regulares, pero no me considero experto; algunas expresiones son tan caprichosas que incluso pueden quitarte varias horas o días en resolver y lograr así una expresión lo más depurada posible.

Usando la función preg_match_all podemos evaluar una cadena de acuerdo a una expresión regular y guardar sus coincidencias en una matriz.

Por ejemplo: hoy me ha tocado separar una fecha que está de la forma aaaammdd; año, mes, día. Para separarla y manipularla usaremos una expresión regular, vamos ahí:

$n = 19870317;
preg_match_all("/(\d{4})(\d{2})(\d{2})/",$n,$c);
echo $c[1][0]."\n".$c[2][0]."\n".$c[3][0];

Donde:

Por supuesto puedes depurar tus resultados con un:

print_r($c);

Más información en : Sintaxis de los Patrones de expresiones regulares compatibles con Perl

Bonus: Ya que estamos en el tema, el mismo efecto pero usando Vim sería:

:s/\(\d\{4\}\)\(\d\{2\}\)/\1 \2 /g

Enlace Permanente, Comentarios (6), Publicada en: Código | PHP

Comentarios

1. 0x01
20.Jun.2006

Juque:

Me extraña que uses eso, hay una forma mas facil con substr

?PHP

$n = 19870317;

$anio = substr($n, 0,3); $mes = substr($n, 3,5); $dia = substr($n, 5,7);

printf('Estamos a ' . $dia . ' del ' . $mes . ' del ' . $anio);

?>

2. juan pablo
20.Jun.2006

jejeje, ¿realmente crees que es mejor?, míralo una vez más. Una función, dos variables.

3. Ricardo Aroca
21.Jun.2006

Una buena forma de comparar sería que ver cual de las dos técnicas ocupa más recursos del sistema (procesador y memoria) y cual toma menos tiempo para obtener el mismo resultado.

4. judas
21.Jun.2006

mmm.......... que feo..jejejej ¡¡ xD

mejor dejemoslo asi:

$n = 19870317; echo strftime("%d-%m-%Y",strtotime($n));

5. judas
21.Jun.2006

@ricardo

La mejor forma es la que sea mas legible, menos obscura y que utilize las funciones que el lenguaje tiene para manejar fechas :)

@0x01

Tu forma tambien sirve, aunque mejor usa las funciones de tiempo que tiene PHP

@juan pablo

Defintivamente no compartimos el gusto por las expresiones regulares, las encuentro a menudo en codigo de otras personas las usan para tareas muy triviales que no las requieren como este ejemplo, siempre las macheteo con mi hacha de bolsillo :) me hacen el codigo menos comprensible...

Igual es bueno que publiques estos ejemplos cortos.. para discutir un rato. ;-)

6. rockerox
19.Jul.2006

Yo voto por la expresion regular, es la manera directa de formatear texto. internamente esas funciones como por ejemplo substr, hace una busqueda mediante expresiones regulares.