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:
<?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 ?
Ya di con la solucion....
<?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 !
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:
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
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 (http://php.net/manual/es/regexp.reference.delimiters.php)
Saludos.