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 :

Expression régulière imparfaite [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juillet 2013
    Messages : 5
    Par défaut Expression régulière imparfaite
    Bonjour,
    J'ai un soucis sur cette expression régulière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match('/[0-9]{1,12}-[0-9][0-9]-[0-9]$/', $text, $matches);
    Avec ce texte $text = "texttexttext text 11111-11-1text"
    le tableau $matches est vide.

    alors que s'il n'y a pas de texte après la suite de chiffre j'ai bien un résultat.
    Exemple : avec $text = "texttexttext text 11111-11-1";
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $matches[0] == 11111-11-1;
    J'ai essayé de dire que n'importe quel caractère pouvait se trouver après le dernier chiffre avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '/[0-9]{1,12}-[0-9][0-9]-[0-9].*$/'
    mais du coup il ne m'isole plus la suite de chiffre et rajoute les caractères qui suivent au résultat.

    Etant débutant en expression régulière un petit coup de pouce serait bien venu.


  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Enlève simplement le $ qui symbolise la fin de ta chaine.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éprouvé Avatar de denissay
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 103
    Par défaut
    C'est normal qu'il n'y a pas de match dans "texttexttext text 11111-11-1text" avec le pattern /[0-9]{1,12}-[0-9][0-9]-[0-9]$/ vu que celui-ci cherche une chaine de la forme 11111-11-1 à la fin du texte d'entrée $text grâce à l'usage du symbole $

    Rajouter le ".*" est une bonne chose, mais tu n'a fais que verifier que $texte contient cette structure, ce que le preg_match a fait et a retourné le texte correspondant à savoir "11111-11-1text" dans $matches[0].

    Pour récupérer/capturer une partie de cette structure, tu dois la mettre entre parenthèses et donc l'expression devient /([0-9]{1,12}-[0-9][0-9]-[0-9]).*$/ et le résultat est enregistré dans $matches[1], $matches[0] comme j'ai dis avant contient tous le texte correspondant au pattern y compris le string text de la fin.

    Si tu entoures .* avec des parenthèses, tu trouvera son contenu dans $matches[2]... Donc, si tu as bien suivi, le premier groupe entre parenthèses sera stocké dans $matches[1], les second dans $matches[2], et ainsi de suite...

    Plus simple encore, si ton texte n'est sensé contenir qu'une seule chaine de forme "11111-11-1", tu n'as tous simplement qu'à utiliser /([0-9]{1,12}-[0-9][0-9]-[0-9])/

    Ou encore /([0-9]{1,12}-[0-9][0-9]-[0-9])\b/ pour éviter de matcher "11111-11-1" dans "11111-11-122"... De toute façon, tu dois fournir tous les cas d'exclusions possible afin d'avoir une expression à toute epreuve... Mais peut-être dans ton cas ceci est suffisant

    Tu peux faire tes différents tests ICI

    J'éspère que c'était assez clair, tiens nous au courant ;-)

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juillet 2013
    Messages : 5
    Par défaut
    Merci à vous!
    J'y suis presque mais je ne trouve pas le même résultat sur le simulateur et en local ????
    Dans le simulateur tout roule :http://regex101.com/r/lM8fK7
    Il me met bien l'ensemble des occurrences trouvées dans $matches :

    MATCH 1
    1.	[25-35]	
    `11111-11-1`
    MATCH 2
    1.	[48-61]	
    `11112222-11-1`
    MATCH 3
    1.	[63-76]	
    `11112222-11-1`
    MATCH 4
    1.	[78-91]	
    `11112222-11-1`
    par contre en local j'ai que 2 résultats (les mêmes) :

    MATCH 1 : `11111-11-1`
    MATCH 2 : `11111-11-1`
    alors que j'ai copié/collé le code généré par le simulateur ....
    soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $re = '/([0-9]{1,12}-[0-9][0-9]-[0-9])/'; 
    $str = 'dibenzothiophène-sulfone 11111-11-11414dfsdfsdf 11112222-11-1
    (11112222-11-1)[11112222-11-1]'; 
     
    preg_match($re, $str, $matches);
    print_r($matches);

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Utilise preg_match_all()
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juillet 2013
    Messages : 5
    Par défaut
    Merci grandement

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

Discussions similaires

  1. [RegEx] Expression régulières : Balises <SCRIPT>
    Par Gwipi dans le forum Langage
    Réponses: 2
    Dernier message: 25/04/2006, 00h25
  2. Expression réguliére
    Par Mad_Max dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 16/09/2003, 19h17
  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, 11h06
  4. Expressions réguliéres
    Par Tooms dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2002, 19h42
  5. Réponses: 5
    Dernier message: 11/06/2002, 16h21

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