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 :

Construire une regex


Sujet :

Langage PHP

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut Construire une regex
    Bonjour,

    Je recherche la regex qui me permettra de trouvé ces éléments dans cette chaine :

    Prix : 200 000 € Ville : 76560 Doudeville Frais d'agence inclus : Oui Type de bien : Terrain En plein centre ville, sur la place principale de Doudeville.

    [0] = 200 000
    [1] = 76560 Doudeville
    [2] = Oui
    [3] = Terrain En plein centre ville, sur la place principale de Doudeville.

    Auriez vous une idée ?

  2. #2
    Membre actif Avatar de John Blobsmith
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 198
    Points : 223
    Points
    223
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $array = array();
    $str = "Prix : 200 000 € Ville : 76560 Doudeville Frais d'agence inclus : Oui Type de bien : Terrain En plein centre ville, sur la place principale de Doudeville.";
    preg_match_all('#^.* : ([0-9]+ [0-9]+) .* : ([0-9]+ .*) .* : ([a-zA-Z]+) .* : (.*)$#Usi', $str, $array);
    print_r('<pre>');
    print_r($array);
    print_r('</pre>');
    bien entendu vu la complexité de la recherche ca ne marchera pas dans le cas ou il manque des paramètres ou un des paramètres recherché est différent du format que tu nous montre.

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    ok merci.

    le Usi veux dire quoi ?

    Je pensais aussi à une chose, pour rentre la regex plus robuste, je me suis basé sur ton exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match_all('#Prix : ?([0-9 ]*?) ?.?&euro; Ville : ?(.*) ?Frais d\'agence inclus : ?(.*) ?Type de bien : ? (.*) Sauvegarder l\'annonce#i', $line, $array);

  4. #4
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    le Usi veux dire quoi ?
    ce sont des options supplémentaires qui permettent d'ajouter d'informations à ta recherche.

    En résumé :
    Citation Envoyé par http://fr2.php.net/manual/fr
    • U (UNGREEDY) => Cette option inverse la tendance à la gourmandise des expressions rationnelles. Vous pouvez aussi inverser cette tendance au coup par coup avec un ? mais cela rendra gourmand la séquence...
    • s (DOTALL) => Avec cette option, le métacaractère point (.) remplace n'importe quel caractère, y compris les nouvelles lignes. Sans cette option, le caractère point ne remplace pas les nouvelles lignes.
    • i (CASELESS) => Effectue une recherche insensible à la casse.
    voir aussi http://g-rossolini.developpez.com/tutoriels/php/regex

  5. #5
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Bonjour,

    Une idée un peu moins générique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $str = "Prix : 200 000 € Ville : 76560 Doudeville Frais d'agence inclus : Oui Type de bien : Terrain En plein centre ville, sur la place principale de Doudeville.";
     
    $reg = "/
    ^
    ( Prix                        \s+ : \s+ [0-9 ]+ .+?	)? \s+
    ( Ville                       \s+ : \s+ [0-9]+ .+?  )? \s+
    ( Frais \s d'agence \s inclus \s+ : \s+ (Oui|Non)   )? \s+
    ( Type \s de \s bien          \s+ : \s+ .* 		    )?
    /x";
     
    preg_match_all($reg, $str, $m);
     
    print_r($m);

Discussions similaires

  1. [RegEx] Besoin d'aide pour construire une regex complexe
    Par Predax dans le forum Langage
    Réponses: 2
    Dernier message: 06/03/2013, 08h52
  2. Réponses: 4
    Dernier message: 01/10/2012, 18h40
  3. comment construire une interface comme une pomme...
    Par redanium dans le forum C++Builder
    Réponses: 3
    Dernier message: 29/10/2004, 15h35
  4. [MIB] Questions pour construire une mib
    Par fadoua dans le forum Développement
    Réponses: 4
    Dernier message: 11/03/2004, 10h47
  5. Difficulté à construire une requête
    Par coolcpu dans le forum Langage SQL
    Réponses: 6
    Dernier message: 08/10/2003, 00h43

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