Frage

Ich bin Verarbeitung von Zeichenketten mit einem Datum irgendwo drin. Es gibt verschiedene Möglichkeiten, das Datum in dieser Zeichenfolge erscheinen:

"... 01.11.2009 18: 00-21: 00 ..." oder "... 01.11.2009 18: 00-02.11.2009 15.00 Uhr ..." oder "... 01.11.2009 18.00 Uhr ..."

Unabhängig davon, wie das Datum angezeigt ich nur den Anfang Datum „01.11.2009 18.00 Uhr“ benötigen. Wenn es also zwei Spiele ist es nur die erste. Wie kann ich dies in PHP aus der vollständigen Zeichenfolge isolieren / Explodieren. irgendeine Idee?

Ich glaube, ich brauche ein Muster mit Regex zu erstellen und sie dann mit preg_match übereinstimmen. Ist dies der Weg? Leider bin ich nicht sehr viel in regex. Könnte jemand helfen mein einziges Datum Block aus einer zufälligen Zeichenkette mit bekommen?

War es hilfreich?

Lösung

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

Andere Tipps

Versuchen:

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

Wenn Sie das Datum auf folgende Weise formatiert ist, haben Sie immer die gleiche Anzahl von Zeichen für jedes Datum. Sie könnten dann eine einfache substr () verwenden, um den Anfang X Zeichen zu übernehmen:

// 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);

Versuchen Sie dieses:

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"

Sie können das erste Datum in diesem Format extrahieren Sie die Funktion unter Verwendung von:

function find_date($string) {
    preg_match("/\d{2}\.\d{2}\.\d{4} \d{2}:\d{2}/",$string,$matches);
    return $matches[0];
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top