Question

Je traite des chaînes avec une date quelque part. La date peut apparaître de différentes manières dans cette chaîne:

" & # 8230; 01.11.2009 18: 00-21: 00 & # 8230; " ou " & # 8230; 01.11.2009 18: 00-02.11.2009 15:00 & # 8230; " ou " & # 8230; 01.11.2009 18:00 & # 8230; "

Quelle que soit l'apparence de la date, je n'ai besoin que de la date de début "01.11.2009 18: 00". Donc, s'il y a deux matches, c'est juste le premier. Comment puis-je isoler / exploser cela de la chaîne complète en php. une idée?

Je suppose que je dois créer un motif avec regex puis le faire correspondre à preg_match. Est-ce le chemin? Malheureusement, je ne suis pas très habitué à la regex. Quelqu'un pourrait-il m'aider à obtenir mon seul bloc de dates à partir d'une chaîne aléatoire?

Était-ce utile?

La solution

$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];

Autres conseils

Essayez:

$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 votre date est formatée de la manière suivante, vous aurez toujours le même nombre de caractères pour chaque date. Vous pouvez ensuite utiliser un simple substr () pour prendre le début des caractères 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);

Essayez celui-ci:

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"

Vous pouvez extraire la première date dans ce format à l'aide de la fonction ci-dessous:

function find_date($string) {
    preg_match("/\d{2}\.\d{2}\.\d{4} \d{2}:\d{2}/",$string,$matches);
    return $matches[0];
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top