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?

Foi útil?

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];
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top