J'ai un problème avec les expressions rationnelles, en utilisant preg_match_all(), pour faire correspondre quelque chose de longueur variable.
Ce que j'essaie de faire correspondre, c'est l'état du trafic après le mot "congestion". J'ai trouvé ce modèle de regex :
Congestion\s*:\s*(?P<congestion>.*)
Il extrairait cependant la première instance jusqu'à la fin du sujet entier, puisque .* correspondrait à tout. Mais ce n'est pas ce que je veux, j'aimerais qu'elle corresponde séparément à 3 instances.
Maintenant, puisque les mots derrière Congestion peuvent être de longueur variable, je ne peux pas vraiment prédire combien de mots et d'espaces il y a entre eux pour arriver à un critère plus strict. \w * \s * \w * match etc.
Des indices sur la façon dont je peux procéder à partir de là ?
Highway : Highway 26
Datetime : 18-Oct-2010 05:18 PM
Congestion : Traffic is slow from Smith St to Alice Springs St
Highway : Princes Highway
Datetime : 18-Oct-2010 05:18 PM
Congestion : Traffic is slow at the Flinders St / Elizabeth St intersection
Highway : Eastern Freeway
Datetime : 18-Oct-2010 05:19 PM
Congestion : Traffic is slow from Prince St to Queen St
MODIFIER POUR PLUS DE CLARTÉ
Ces textes très joliment formatés sont en fait reçus via un courrier électronique html très mal formaté. Il contient des sauts de ligne aléatoires ici et là, par exemple "Congestion : Trafic". \n est lent de Prince \nSt à Queen St".
Donc, pendant le traitement des courriels, j'ai enlevé tous les codes html et les sauts de ligne aléatoires, et json_encode() les a transformés en une très longue chaîne d'une seule ligne sans saut de ligne...