php - regulares - matches java ejemplo
¿Cuál es el patrón de expresiones regulares para datetime(2008-09-01 12:35:45)? (12)
con respecto a la respuesta de Imran del 1 de septiembre de 2008 a las 12:33 falta: en el patrón, los patrones correctos son
preg_match(''//d{4}-/d{2}-/d{2} /d{2}:/d{2}:/d{2}/'', ''2008-09-01 12:35:45'', $m1);
print_r( $m1 );
preg_match(''//d{4}-/d{2}-/d{2} /d{1,2}:/d{2}:/d{2}/'', ''2008-09-01 12:35:45'', $m2);
print_r( $m2 );
preg_match(''/^/d{4}-/d{2}-/d{2} /d{2}:/d{2}:/d{2}$/'', ''2008-09-01 12:35:45'', $m3);
print_r( $m3 );
esto regresa
Array ( [0] => 2008-09-01 12:35:45 )
Array ( [0] => 2008-09-01 12:35:45 )
Array ( [0] => 2008-09-01 12:35:45 )
¿Cuál es el patrón RegEx para DateTime (2008-09-01 12:35:45)?
Me sale este error:
No se ha encontrado ningún delimitador final ''^''
Utilizando:
preg_match(''(?n:^(?=/d)((?<day>31(?!(.0?[2469]|11))|30(?!.0?2)|29(?(.0?2)(?=.{3,4}(1[6-9]|[2-9]/d)(0[48]|[2468][048]|[13579][26])|(16|[2468][048]|[3579][26])00))|0?[1-9]|1/d|2[0-8])(?<sep>[/.-])(?<month>0?[1-9]|1[012])/2(?<year>(1[6-9]|[2-9]/d)/d{2})(?:(?=/x20/d)/x20|$))?(?<time>((0?[1-9]|1[012])(:[0-5]/d){0,2}(?i:/ [AP]M))|([01]/d|2[0-3])(:[0-5]/d){1,2})?$)'', ''2008-09-01 12:35:45'');
Da este error:
Advertencia: preg_match () [function.preg-match]: Compilación fallida: nada que repetir en el desplazamiento 0 en E: / www / index.php en la línea 19
@Espo: Solo tengo que decir que Regex es increíble. No me gustaría tener que escribir el código que hizo algo útil con las coincidencias, como por ejemplo si realmente desea saber qué fecha y hora escribió el usuario.
Parece que la solución de Tom sería más sostenible, ya que es un billón de veces más simple y con la adición de algunos paréntesis puedes obtener fácilmente los valores que el usuario escribió:
(/d{4})-(/d{2})-(/d{2}) (/d{2}):(/d{2}):(/d{2})
Si está usando Perl, puede obtener los valores con algo como esto:
$year = $1;
$month = $2;
$day = $3;
$hour = $4;
$minute = $5;
$second = $6;
Otros idiomas tendrán una capacidad similar. Tenga en cuenta que necesitará hacer algunos cambios menores a la expresión regular si desea aceptar valores tales como meses de un solo dígito.
Debería encontrar lo que está buscando en http://regexlib.com/DisplayPatterns.aspx?cattabindex=4&categoryId=5 .
Una versión simple que funcionará para el formato mencionado, pero no todos los demás según @Espos:
(/d{4}-/d{2}-/d{2} /d{2}:/d{2}:/d{2})
http://regexlib.com/REDetails.aspx?regexp_id=610
^ (? = / d) (? :( ?: 31 (?!. (?: 0? [2469] | 11)) | (?: 30 | 29) (?!. 0? 2) | 29 (? = .0? 2. (? :(? :( ?: 1 [6-9] | [2-9] / d)? (?: 0 [48] | [2468] [048] | [13579] [ 26]) | (? :( ?: 16 | [2468] [048] | [3579] [26]) 00))) (?: / X20 | $)) | (?: 2 [0-8] | 1 / d | 0? [1-9])) ([-. /]) (?: 1 [012] | 0? [1-9]) / 1 (?: 1 [6-9] | [2 -9] / d)? / D / d (?: (? = / X20 / d) / x20 | $))? (((0? [1-9] | 1 [012]) (: [0- 5] / d) {0,2} (/ x20 [AP] M)) | ([01] / d | 2 [0-3]) (: [0-5] / d) {1,2}) ps
Este RE valida ambos patrones de fechas y / o tiempos. Los días de febrero también están validados para los años bisiestos. Fechas: en formato dd / mm / aaaa o d / m / aa entre 1/1/1600 - 31/12/9999. Los ceros a la izquierda son opcionales. Los separadores de fecha pueden coincidir con guiones (-), barras inclinadas (/) o puntos (.) Horas: en formato hh: MM: ss AM / PM de 12 horas (12:00 AM - 11:59:59 PM) o hh : Formato de hora militar MM: ss (00:00:00 - 23:59:59). El formato de hora de 12 horas: 1) puede tener un cero inicial por hora. 2) Los minutos y segundos son opcionales para el formato de 12 horas 3) Se requiere AM o PM y distingue entre mayúsculas y minúsculas. El tiempo militar 1) debe tener un cero inicial para todas las horas menores que 10. 2) Los minutos son mandorios. 3) los segundos son opcionales Datetimes: combinación de los formatos anteriores. Una fecha primero, luego un tiempo separado por un espacio. ex) dd / mm / aaaa hh: MM: ss
Editar : asegúrese de copiar el RegEx del sitio web regexlib.com ya que a veces elimina / destruye los caracteres especiales.
Las funciones PHP preg necesitan que tu expresión regular esté envuelta con un carácter delimitador, que puede ser cualquier carácter. No puede usar este carácter delimitador sin escaparse dentro de la expresión regular. Esto debería funcionar (aquí el carácter delimitador es /):
preg_match(''//d{4}-/d{2}-/d{2} /d{2}:/d{2}:/d{2}/'', ''2008-09-01 12:35:45'');
// or this, to allow matching 0:00:00 time too.
preg_match(''//d{4}-/d{2}-/d{2} /d{1,2}:/d{2}:/d{2}/'', ''2008-09-01 12:35:45'');
Si necesita unir líneas que contienen solo fecha y hora, agregue ^ y $ al principio y al final de la expresión regular.
preg_match(''/^/d{4}-/d{2}-/d{2} /d{2}:/d{2}:/d{2}$/'', ''2008-09-01 12:35:45'');
^([2][0]/d{2}//([0]/d|[1][0-2])//([0-2]/d|[3][0-1]))$|^([2][0]/d{2}//([0]/d|[1][0-2])//([0-2]/d|[3][0-1])/s([0-1]/d|[2][0-3])/:[0-5]/d/:[0-5]/d)$
$date = "2014-04-01 12:00:00";
preg_match(''/(/d{4})-(/d{2})-(/d{2}) (/d{2}):(/d{2}):(/d{2})/'',$date, $matches);
print_r($matches);
$ coincidencias serán:
Array (
[0] => 2014-04-01 12:00:00
[1] => 2014
[2] => 04
[3] => 01
[4] => 12
[5] => 00
[6] => 00
)
Una manera fácil de dividir una cadena formateada en fecha y hora.
Aquí hay una versión simplificada (originada de la respuesta de Espo). Comprueba la corrección de la fecha (incluso el año bisiesto) y hh: mm: ss es opcional
Ejemplos que funcionan:
- 31/12/2003 11:59:59
- 29-2-2004
^(?=/d)(?:(?:31(?!.(?:0?[2469]|11))|(?:30|29)(?!.0?2)|29(?=.0?2.(?:(?:(?:1[6-9]|[2-9]/d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(?:/x20|$))|(?:2[0-8]|1/d|0?[1-9]))([-./])(?:1[012]|0?[1-9])/1(?:1[6-9]|[2-9]/d)?/d/d(?:(?=/x20/d)/x20|$))(|([01]/d|2[0-3])(:[0-5]/d){1,2})?$
Aquí está mi solución:
/^(2[0-9]{3})-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01]) (0[0-9]|1[0-9]|2[0123])/:([012345][0-9])/:([012345][0-9])$/u
Modifiqué el patrón de expresiones regulares de http://regexlib.com/REDetails.aspx?regexp_id=610 . El siguiente patrón debe coincidir con su caso.
^(?=/d)(?:(?:1[6-9]|[2-9]/d)?/d/d([-.//])(?:1[012]|0?[1-9])/1(?:31(?<!.(?:0[2469]|11))|(?:30|29)(?<!.02)|29(?=.0?2.(?:(?:(?:1[6-9]|[2-9]/d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(?:/x20|$))|(?:2[0-8]|1/d|0?[1-9]))(?:(?=/x20/d)/x20|$))?(((0?[1-9]|1[012])(:[0-5]/d){0,2}(/x20[AP]M))|([01]/d|2[0-3])(:[0-5]/d){1,2})?$
AAAA-MM-DD HH: MM: SS
Aquí está mi solución:
[12]/d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]/d|3[01]) ([01][0-9]|2[0-3]):[0-5]/d