[Expresion Regular] Para leer hora y minutos delimitada con ":" ?

Iniciado por Diabliyo, 26 Septiembre 2012, 04:20 AM

0 Miembros y 1 Visitante están viendo este tema.

Diabliyo

Buenas...

Quiero construir una expresión regular para leer esto: 10:30, que sera una expresión de tiempo (hora:minutos). Asumiendo que pueden existir dos variantes:

Forma 1-> 10:40
Forma 2-> 8:10

En la Forma 1 son dos valores antes del delimitado ":" y dos valores después.
En la Forma 2 es un solo valor antes del delimitado ":" y dos valores después.

Me hice un codigo pero no logro dar con el correcto para mi programa:

Código (php) [Seleccionar]

<?php
$hora1
'10:20'# hora correcta
$hora2'8:30'# hora correcta
$hora3'150:20'# hora incorrecta
$hora4'ab:20'# hora incorrecta

$patron'/[0-9]{2}\:[0-9]{2}/is';
preg_match$patron$hora1$r);

print_r($r);
?>


El resultado que me da es:
Array ( [0] => 10:20 )

Se supone deberia crear un array con los dos valores encontrados y analizados, pero no sucede...

Cual seria la forma correcta ?

Diabliyo

Ya di con la solucion....

Código (php) [Seleccionar]
<?php
$hora1
'10:20'# hora correcta
$hora2'8:30'# hora correcta
$hora3'150:20'# hora incorrecta
$hora4'ab:20'# hora incorrecta

$patron'/([0-9]{1,})\:([0-9]{1,})/is';
preg_match_all$patron$hora1$r);
 
print_r($r);
?>


Resultado:

Array (
 [0] => Array( [0] => 10:20 )
 [1] => Array( [0] => 10 )
 [2] => Array( [0] => 20 )
)


Me queda solo una duda... en mi expresion regular ($patron), uso el valor is, pero he notado que otro usan m o que usan |..expresion..|, en vez de /..expresion../.

Que difiere eso ?, proque si lo aplico en el codigo, sigue haciendo lo mismo :S

Saludos !

~ Yoya ~

El modificador m, se utiliza normalmente en conjunto con ^ o $, o los dos a la vez. Si te fijas, cuando utilizas ^ o $, en el patron este afecta al inicio del texto o al final del texto pero nada mas hay. Pero si deseas que ^ y $, funcionen en cada nueva linea entonce utilizas el modificador m-

Ejemplo:
Código (php) [Seleccionar]
preg_match_all('/^(h\w+)/im', 'hola mundo xD hPO xdd aaad hXP ', $result);

Salida:
Array
(
    [0] => Array
        (
            [0] => hola
            [1] => hPO
            [2] => hXP
        )

    [1] => Array
        (
            [0] => hola
            [1] => hPO
            [2] => hXP
        )

)


Ahora sin el modificador m

Código (php) [Seleccionar]
preg_match_all('/^(h\w+)/i', 'hola mundo xD hPO xdd aaad hXP ', $result);
Array
(
    [0] => Array
        (
            [0] => hola
        )

    [1] => Array
        (
            [0] => hola
        )

)




Lo de "|..expresion..|", son simplemente delimitadores, normalmente se utilizan # y demas delimitadores para no tener que escapar las barras. Yo en lo personal recomiendo utilizar el delimitador //.

Delimitadores

Saludos.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.