IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Problème pour finaliser une expression régulière [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut Problème pour finaliser une expression régulière
    Bonjour,

    J'ai l'expression régulière suivante : https://regex101.com/r/vP5tA2/2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $re = "/<Polygon><outerBoundaryIs><LinearRing><coordinates>((\\d+\\.\\d+),(\\d+\\.\\d+),0\\s)+<\\/coordinates><\\/LinearRing><\\/outerBoundaryIs><\\/Polygon>/"; 
    $str = "<Polygon><outerBoundaryIs><LinearRing><coordinates>2.733897131762757,50.39227259006359,0 2.726755269523395,50.39633274110972,0 2.725992371380537,50.40233689568181,0 2.702301397372375,50.40632186236604,0 2.681731559318261,50.40709649735567,0 2.66976557731752,50.41317859184656,0 2.664998292113361,50.41176531549449,0 2.662559637379971,50.40879619215566,0 2.670846433473257,50.40039783429479,0 2.666532809381454,50.3942726584937,0 2.674147256811876,50.38949901542755,0 2.698878560952838,50.38435482948949,0 2.714564862154645,50.3839072936021,0 2.729458257558992,50.38726249956464,0 2.733897131762757,50.39227259006359,0 </coordinates></LinearRing></outerBoundaryIs></Polygon>"; 
     
    preg_match($re, $str, $matches);
    Je n'arrive pas à récupérer la forme suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (\d+\.\d+),(\d+\.\d+),0\s
    plusieurs fois.

    Merci,
    ZiP

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Ta chaîne source est ni plus ni moins du XML, donc utilise des outils XML pour extraire dans un premier temps l'ensemble des coordonnées. Une fois que c'est fait, inutile d'utiliser une expression régulière pour obtenir chaque coordonnées vu que c'est toujours la même chose, c'est à dire la latitude, la longitude et l'élévation séparées de virgules puis un espace jusqu'aux prochaines coordonnées. Deux explode et c'est fini.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $dom = new DOMDocument;
    $dom->loadXML($str);
     
    $xp = new DOMXPath($dom);
    $coordinates = $xp->query('/Polygon/outerBoundaryIs/LinearRing/coordinates')->item(0)->nodeValue;
     
    $result = explode(' ', trim($coordinates));
     
    $result = array_map(function ($i) { return explode(',', $i); }, $result);
     
    print_r($result);
    Si cela ne t'est pas familier, n'hésite pas à regarder le manuel PHP ou à consulter des tutoriels sur le DOM(Document Object Model) et XPath.

    Maintenant pourquoi ta vilaine approche regex n'a pas marché? C'est très simple. Quand on répète un groupe de capture, la valeur précédemment stockée est remplacée par la suivante et ainsi de suite. C'est pour ça que tu n'obtiens que les dernières coordonnées.
    Tu as voulu tout faire d'un coup, trouver l'ensemble des coordonnées, isoler chaque coordonnées, et séparer latitude, longitude et élévation. Pas étonnant que tu galères! C'est cela dit faisable mais ce n'est pas simple.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonsoir,

    Merci pour votre aide !

    J'ai réussi à faire quelque chose de simple et qui marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        $re = "/<Polygon><outerBoundaryIs><LinearRing><coordinates>|\\G(\\d+\\.\\d+),(\\d+\\.\\d+),0\\s/"; 
        $str = "<Polygon><outerBoundaryIs><LinearRing><coordinates>2.733897131762757,50.39227259006359,0 2.726755269523395,50.39633274110972,0 2.725992371380537,50.40233689568181,0 2.702301397372375,50.40632186236604,0 2.681731559318261,50.40709649735567,0 2.66976557731752,50.41317859184656,0 2.664998292113361,50.41176531549449,0 2.662559637379971,50.40879619215566,0 2.670846433473257,50.40039783429479,0 2.666532809381454,50.3942726584937,0 2.674147256811876,50.38949901542755,0 2.698878560952838,50.38435482948949,0 2.714564862154645,50.3839072936021,0 2.729458257558992,50.38726249956464,0 2.733897131762757,50.39227259006359,0 </coordinates></LinearRing></outerBoundaryIs></Polygon>"; 
     
        preg_match_all($re, $str, $matches);
    ZiP

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] Aide pour finaliser une expression régulière
    Par [ZiP] dans le forum Langage
    Réponses: 3
    Dernier message: 16/10/2013, 22h25
  2. [RegEx] Problème pour concevoir une expression régulière
    Par lokicorp dans le forum Langage
    Réponses: 5
    Dernier message: 08/07/2011, 13h12
  3. [Java][Xpath] Problème pour rédiger une expression
    Par althea_vestrit dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 23/01/2006, 20h53
  4. Réponses: 6
    Dernier message: 17/08/2005, 12h38
  5. Problème sur une expression régulière
    Par Verbal-Quint dans le forum Langage
    Réponses: 6
    Dernier message: 12/11/2004, 10h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo