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 :

Chaine se terminant par un tiret suivi de 1, 2 ou 3 chiffres [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Par défaut Chaine se terminant par un tiret suivi de 1, 2 ou 3 chiffres
    Bonjour à tous,

    Comme l'indique le titre de mon post je cherche à détecter les chaines de caractères se finissant par un tiret (-) suivi de 1, 2 ou 3 chiffres.

    Comme je ne comprend pas grand chose aux expressions régulières, j'essaye en commençant par quelque chose de simple : détecter dans ma liste de chaines de caractères celles se terminant par 1, 2 ou 3 chiffres.

    Comme il s'agit de fichiers, je commence par écarter l'extension, ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach($tabImg as $num => $img){
    	$tab = explode(".", $img);
    	if(preg_match('#[0-9]\z#', $tab[0])) echo $img."<br />";
    };
    Or je me retrouve par exemple avec ceci :
    2013_06_TOY-MACHINE-DECK-8.25-TEMPLETON-ELEPHANT-PAR.jpg

    Dans les documentations que j'ai trouvé, j'avais cru comprendre que \z indiquait la fin de la chaine testée...

    Pouvez-vous m'aider à comprendre ?

    Merci d'avance pour vos réponses

  2. #2
    Invité
    Invité(e)

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 051
    Par défaut
    Je ne suis pas expert également, mais il faudrait certainement préciser la taille de la fin de chaîne : Préciser à ton expression que tu peux avoir seulement un ou deux chiffre à la fin, précéder d'un tiret. Ca devrait ressembler à ceci :
    Je ne sais pas si c'est la synthaxe exacte, mais en gros dire que ta châine finit par un tiret (touche 6), suivi d'un chiffre entre 0 et 9. Surement l'adapter pour lui dire qu'il y a un ou deux chiffres

  4. #4
    Invité
    Invité(e)
    Par défaut
    @bob633 :
    on trouve des réponses dans le lien que j'ai mis ci-dessus.
    Encore faut-il prendre le temps de cliquer dessus, et de lire le tuto.

    [Edit] Ce n'est JAMAIS une perte de temps de lire un tuto.
    Ni de chercher.
    J'ai moi-même beaucoup appris en cherchant des réponses pour les autres.
    Dernière modification par Invité ; 09/08/2013 à 17h48.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Par défaut
    Merci de vos réponses !

    @jreaux62 : hé bien il se trouve que je dois être particulièrement idiot puisque c'est en suivant ce tuto que je suis arrivé à mon expression qui ne fonctionne pas.

    @bob633 : avant même de chercher à détecter le tiret, je cherche à détecter que ma chaîne de caractère se termine par un chiffre c'est pourquoi j'ai utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(preg_match('#[0-9]$#', $tab[0]))
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(preg_match('#[0-9]\z#', $tab[0]))
    Mais à chaque fois je récupère aussi des chaines se terminant par des lettres...

    @jreaux :
    Encore faut-il prendre le temps de cliquer dessus, et de lire le tuto.
    D'une grande clairvoyance : avant même que j'ai répondu quoi que ce soit tu savais déjà que je ne m'étais même pas donné la peine de cliquer sur ton lien... chapeau bas.
    C'est d'ailleurs pour cela que je viens sur ce forum, pour que quelqu'un me reconnaisse à ma vraie valeur.

  6. #6
    Expert confirmé

    Avatar de FirePrawn
    Homme Profil pro
    Consultant technique
    Inscrit en
    Mars 2011
    Messages
    3 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : Mars 2011
    Messages : 3 179
    Par défaut


    Ton pattern est bon c'est le test qui ne l'est pas
    Regarde les valeurs de retour de la fonction preg_match().
    Avant toute chose : lire le mode d'emploi du forum et ses règles.
    Je ne réponds pas aux questions techniques en MP.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Par défaut
    Bonjour FirePrawn et merci de ta réponse,

    Je vais creuser cette piste :-)

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Par défaut
    Je ne comprend pas, dans le tuto proposé par jreaux62 c'est bien preg_match qui est utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    <?php
     
    $patterns = array();
    $patterns[0][0] = "#^http$#";
    $patterns[0][1] = "#http$#";
    $patterns[0][2] = "#^http#";
    $patterns[1][0] = "#^.com/$#";
    $patterns[1][1] = "#.com/$#";
    $patterns[1][2] = "#^.com/#";
    $patterns[2][0] = "#^Guillaume Rossolini$#";
    $patterns[2][1] = "#Guillaume Rossolini$#";
    $patterns[2][2] = "#^Guillaume Rossolini#";
     
    $subjects = array();
    $subjects[] = "ftp://ftp.developpez.com/g-rossolini/";
    $subjects[] = "http://g-rossolini.developpez.com/";
    $subjects[] = "http://www.developpez.com/";
    $subjects[] = "http://php.developpez.com/";
    $subjects[] = "Guillaume Rossolini";
    $subjects[] = "0123456789";
    $subjects[] = "01 23 45 67 89";
     
    foreach($patterns as $pattern)
    {
        echo "Où se trouve <strong>".trim($pattern[0], '#^$')."</strong> ?<br /><ul>";
        foreach($subjects as $subject)
        {
            echo "<li>dans <strong>$subject</strong> ?<br />";
            if(preg_match($pattern[0], $subject))
            {
                echo "C'est la chaîne complète";
            }
            elseif(preg_match($pattern[1], $subject))
            {
                echo "À la fin";
            }
            elseif(preg_match($pattern[2], $subject))
            {
                echo "Au début";
            }
            else
            {
                echo "Nulle part";
            }
            echo "</li>";
        }
        echo "</ul>";
    }
     
    ?>
    sans doute y-a-t-il quelque chose de différent de ma manière de l'utiliser mais je ne comprend pas quoi

    Car si j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(strpos($subject, $pattern) === (strlen($subject) - strlen($pattern))
    Je ne comprend pas l'interet d'utiliser l'ancrage de fin ($)

    Merci de m'éclairer un peu

    @jreaux : excuses-moi, c'est vrai que cette réponse rapide m'avait un peu surpris, en relisant je comprend ce que tu veux dire, mais sans doute bob633 était-il en train de rédiger sa réponse en même temps que toi et que vos réponses se sont croisées .

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Alexdezark Voir le message
    ...D'une grande clairvoyance....
    Si tu relis mon message, tu verras qu'il ne s'adressait pas à toi.

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

Discussions similaires

  1. Vérifier si un mot se termine par un "e" et suivi d'un autre commencant par "e"
    Par cookizz dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 25/03/2009, 15h41
  2. Réponses: 5
    Dernier message: 26/08/2008, 16h00
  3. Récuperer div dont l'id se termine par une certaine chaine
    Par Kimado dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/04/2008, 16h20
  4. [regexp] Chaine qui se termine par
    Par cootchy dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 28/08/2007, 18h39
  5. Réponses: 10
    Dernier message: 24/02/2004, 12h28

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