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 :

preg_match et expression régulière


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 68
    Points : 46
    Points
    46
    Par défaut preg_match et expression régulière
    Salut tout le monde,

    J'ai besoin d'un petit coup de main sur une expression régulière simple .

    J'ai besoin dans la chaine suivante de rechercher de qui se trouve entre 'dom' et le premier 'double U' .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dom=un-r1-ou-rien.netUUip=10.3.3.88UUdate=12/10
    J'ai écris l'expression suivante, mais ça ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       if (preg_match('/^dom(.*)UU$/', $body , $matches)) {
         print_r($matches);
       }

    Une idée ? merci

  2. #2
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Bonjour,

    Dans ton pattern, le caractère $ signifie fin de chaîne.

    Or, dans ton exemple, il y a des caractères après le double UU.

    Tu as 2 solutions :
    1. Tu enlèves le $ : '/^dom(.*)UU/'
    2. Tu précises qu'il peut y avoir des caractères après UU : '/^dom(.*)UU.*$/'

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 68
    Points : 46
    Points
    46
    Par défaut
    Je ne comprend pas très bien ta réponse car si je ne déclare pas la fin de la pattern, il me donner toute la ligne et ne s'arrête pas aux UU

    En faite, je veux récupérer seulement ce qui se trouve entre 'dom' et 'UU' (non compris).

  4. #4
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Bonjour,

    Si tu ajoutes le caractère de fin de chaîne, cela signifie que tu dois décrire TOUTE la chaîne.

    Dans ton exemple, elle ne s'arrête pas au UU, il y a des caractères après.

    Il faut donc que tu rajoutes .* pour préciser que des caractères peuvent être présents (c'est la solution 2. que je t'indiquais).

    L'autre solution (1.) consiste à ne décrire que le début de la chaîne en supprimant le caractère $

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2009
    Messages : 19
    Points : 24
    Points
    24
    Par défaut
    Tu peux tout simplement faire :
    $body ='dom=un-r1-ou-rien.netUUip=10.3.3.88UUdate=12/10';

    if (preg_match('/^dom(.*?)UU/', $body , $matches)) {
    print_r($matches);
    }
    le (.*?) dans le regex permet de s'arrêter au premier U.
    le '/^dom(.*)UU.*$/' ne marchera pas car le * est avide.

Discussions similaires

  1. [RegEx] Expression régulière avec preg_match
    Par lesanglier dans le forum Langage
    Réponses: 1
    Dernier message: 07/07/2009, 17h45
  2. [expressions régulières] question sur preg_match
    Par muaddibx dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 28/10/2008, 10h12
  3. [expression régulière] mon cerveau fait des noeuds..
    Par nawac dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 27/05/2003, 10h06
  4. Expressions réguliéres
    Par Tooms dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2002, 18h42
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

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