2010-09-13 10 views
1

J'ai le bit suivant du texte (ou une variante similaire de celui-ci):Regex pour extraire l'horodatage d'un texte en PHP

événement récurrent

Premier départ: 2010-09-16 17: 00:00 HAE

Durée: 4 800

État de l'événement: confirmé

Je dois sélectionner l'horodatage du champ "Premier démarrage" et la durée.

Normalement, je diviserais la chaîne aux deux-points, mais comme l'horodatage les contient, cela devient problématique. Je ne suis pas très bon avec les expressions régulières, mais est-ce que quelqu'un en connaît un qui sera capable de sélectionner les deux bits de données dont j'ai besoin?

applaudissements, Mike

+1

que diriez-vous simplement supprimer le "Premier départ:"? – sheeks06

Répondre

1

Pour une solution simple et non-regex, trouver la première : avec strpos($input, ":"), puis le reste de la ligne aura la valeur.

+0

Cela a fini par travailler pour moi. Bien que la fonction est "strrpos" en PHP – Swift

+0

j'ai probablement encore mes lunettes Java sur ... Je vais mettre à jour la réponse afin de ne pas confondre les autres. – Chadwick

+1

Notez que vous voulez 'strpos (...)' pour trouver le * premier *: ', pas 'strrpos (...)', qui trouve le * dernier *. – Chadwick

2

En supposant que le format reste ainsi, vous pouvez rechercher ":", c'est-à-dire un deux-points suivi d'un espace. La chaîne suivante serait vos données.

1
$content = ' 

    Recurring Event 

    First start: 2010-09-16 17:00:00 EDT 

    Duration: 4800 

    Event Status: confirmed 
'; 

$contentArray = explode('EDT' , $content); 
$head = trim($content[0]); 
//$head will contain 'Recurring Event First start:2010-09-16 17:00:00 ' 

$headArray = explode(' ' , $head); 
$timeStamp = trim(end($headArray)); //which will have 17:00:00 
0

Vous pouvez faire:

if(preg_match('/First start: ([-\d :]+)/',$input,$m)) { 
     $timeStamp = trim($m[1]); 
}else{ 
     $timeStamp = ''; 
} 

if(preg_match('/Duration: (\d+)/',$input,$m)) { 
     $duration = $m[1]; 
}else{ 
     $duration = ''; 
}