Como a explodir data de uma string usando preg_match php e regex
-
06-07-2019 - |
Pergunta
Eu estou processando cordas com um algum lugar data nele. Existem diferentes maneiras a data pode aparecer neste string:
"... 01.11.2009 18: 00-21: 00 ..." ou "... 01.11.2009 18: 00-02.11.2009 15:00 ..." ou "... 01.11.2009 18:00 ..."
De qualquer maneira como a data aparece Eu só preciso a data de início "01.11.2009 18:00". Então, se há duas partidas é apenas o primeiro. Como posso isolar e / ou explosão isso a cadeia completa em php. alguma idéia?
Eu acho que preciso para criar um padrão com regex e, em seguida, combinando-o com preg_match. É esse o caminho? Infelizmente eu não estou em regex muito. Poderia alguém ajuda com a obtenção de meu bloco único data de uma seqüência aleatória?
Solução
$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];
Outras dicas
Tente:
$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]);
Se a sua data é formatada da seguinte maneira, você sempre terá o mesmo número de caracteres para cada data. Você poderia, então, usar um substr () simples para levar os caracteres início X:
// 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);
Tente esta:
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"
Você pode extrair a primeira data nesse formato usando a função a seguir:
function find_date($string) {
preg_match("/\d{2}\.\d{2}\.\d{4} \d{2}:\d{2}/",$string,$matches);
return $matches[0];
}