J'ai un problème avec regex, en utilisant preg_match_all(), pour faire correspondre quelque chose d'une longueur variable.Problème Regex: impossible de faire correspondre un modèle de longueur variable
Ce que je suis en train de faire correspondre est la condition de la circulation après le mot « Congestion » Ce que je suis venu avec est ce modèle regex:
Congestion\s*:\s*(?P<congestion>.*)
Il serait cependant extraire d'abord tout le chemin à la fin du sujet entier, puisque. * correspondrait à tout. Mais ce n'est pas ce que je veux, je voudrais que cela corresponde séparément à 3 instances.
Or, puisque les mots derrière Congestion pourraient être de longueur variable, je ne peux pas vraiment prédire combien de mots et les espaces sont entre les deux pour arriver à une plus stricte \ w * \ s * \ w * correspondance, etc.
Des indices sur la façon dont je peux procéder à partir d'ici?
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
EDIT POUR LA CLARTE
Ces textes très bien formatés, sont effectivement reçus par un e-mail 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".
Ainsi, lors du traitement des e-mails, j'enlevai tous les codes html et les sauts de ligne au hasard, et json_encode() eux dans une très longue chaîne unique en ligne sans saut de ligne ...
Je suis confus - pourriez-vous s'il vous plaît montrer votre sortie/match (s) désiré? – jensgram
Je voudrais extraire les mots après 'Congestions:', c'est-à-dire les conditions de circulation de chaque autoroute. – blacklotus