Cómo explotar la fecha desde una cadena usando php preg_match y regex
-
06-07-2019 - |
Pregunta
Estoy procesando cadenas con una fecha en algún lugar. Hay diferentes maneras en que la fecha puede aparecer en esta cadena:
" ... 01.11.2009 18: 00-21: 00 ... " o "... 01.11.2009 18: 00-02.11.2009 15:00 ..." o "... 01.11.2009 18:00 ..."
Independientemente de cómo aparezca la fecha, solo necesito la fecha de inicio "01.11.2009 18: 00". Entonces, si hay dos coincidencias, es solo la primera. ¿Cómo puedo aislar / explotar esto de la cadena completa en php? alguna idea?
Creo que necesito crear un patrón con expresiones regulares y luego combinarlo con preg_match. ¿Es esta la forma? Lamentablemente, no me gusta mucho la expresión regular. ¿Podría alguien ayudarme a obtener mi bloque de fecha única de una cadena aleatoria?
Solución
$matches = array();
$desired_date = '';
preg_match('/\d{2}\.\d{2}\.\d{4} \d{2}:\d{2}/', $string_containing_dates, $matches);
if (isset($matches[0])) $desired_date = $matches[0];
Otros consejos
Prueba:
$s = "… 01.11.2009 18:00-21:00 …… 01.11.2009 18:00-02.11.2009 15:00 …… 01.11.2009 18:00 …";
preg_match_all('!(\d{2}\.\d{2}\.\d{4}) \d{2}:\d{2}(-\d{2}:\d{2}|-\d{2}\.\d{2}\.\d{4} \d{2}:\d{2})?!', $s, $matches);
print_r($matches[1]);
si su fecha está formateada de la siguiente manera, siempre tendrá el mismo número de caracteres para cada fecha. Luego, podría usar un substr () simple para tomar los caracteres X iniciales:
// example date strings
$date = date('m.d.Y h:i:S');
$date2 = date('m.d.Y h:i:S', strtotime('+50 days'));
$date_str = $date . '-' . $date2;
// get the first 10 characters for the date
$match = substr($date_str, 0, 10);
Pruebe este:
preg_match_all(
'/([0-9]{2}\.[0-9]{2}\.[0-9]{4} [0-9]{2}:[0-9]{2})' // linebreak added
. '(?:-(?:[0-9]{2}\.[0-9]{2}\.[0-9]{4} )?(?:[0-9]{2}:[0-9]{2})?)?/',
'" 01.11.2009 18:00-21:00 " or " 01.12.2009 18:00-02.12.2009 15:00 " '
. 'or " 01.01.2009 18:00 "',
$matches
);
print_r($matches[1]);
// "01.11.2009", "01.12.2009", "01.01.2009"
Puede extraer la primera fecha en ese formato utilizando la función a continuación:
function find_date($string) {
preg_match("/\d{2}\.\d{2}\.\d{4} \d{2}:\d{2}/",$string,$matches);
return $matches[0];
}