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 :

Pb Exp. Régulière


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 18
    Points : 17
    Points
    17
    Par défaut Pb Exp. Régulière
    Bonjour,
    Bon j'ai pensé un moment avoir la solution mais finalement, non D'où ce post !
    Voilà, j'ai une liste de mots clés séparés par des virgules :
    "toto,bob,jack,Bill,tom,tim,Tom 2,john,titi"
    Je souhaite extraire tout ceux qui commencent par une lettre donnée, t par exemple.
    J'ai créé l'expression régulière suivante :
    "/(,)([t|T][^,]+)(,)/"
    J'utilise la fonction suivante :
    preg_match_all($pattern, $string, $out, PREG_PATTERN_ORDER);
    Et je récupère mes mots clés dans $out[2].

    J'ai deux pbs :
    1-Il ne prend pas les "overlaps", donc je vais récupérer 'tom' et 'Tom 2' mais pas 'tim' (du fait que (,)([t]im)(,) et (,)([t]om)(,) ont une virgule (,) en commun ?!!)
    2-Il ne prend pas le premier match (toto) et le dernier (titi) car se sont deux cas spécifiques (pas de virgule) non pris en compte par l'expression régulière. Je pensais traiter ces deux cas séparemment mais si vous avez un idée pour les traiter dans la même expression, je suis prenneur

    Merci pour votre aide,
    -Fly06

  2. #2
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut
    Salut, je m'y connait pas trop dans les expressions régulière, mais si tu faisait un explode() et que tu cherchais ensuite les chaines commençant par t, ne serait-ce pas plus simple à gerer ?
    Quelques conseils:

    Utilisez <?php plutôt que <?
    Utilisez des ' et la concaténation plutôt que "
    Pensez à revenir à la ligne après chaque ; pour plus de clarté.
    // Commentez votre code un maximum

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Un changement d'algorithme peut être ? On découpe la chaîne sur la virgule et on teste chaque partie. Illustration :
    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
     
    <?php
    $string = "toto,bob,jack,Bill,tom,tim,Tom 2,john,titi";
    $morceaux = preg_split('/[,]/', $string, -1, PREG_SPLIT_NO_EMPTY);
    $correspondances = array();
    foreach ($morceaux as $v) {
        if (!strncasecmp('t', $v, 1)) { // C'est pas les façons de faire ce test qui manquent
            $correspondances[] = $v;
        }
    }
    // Affichage du résultat
    echo '<pre>';
    print_r($correspondances);
    echo '</pre>';
    ?>
    J'ai fini par trouver :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php
    $string = "toto,bob,jack,Bill,tom,tim,Tom 2,john,titi,bête";
    preg_match_all("/\b(t[^,]+\b)/i", $string, $out, PREG_PATTERN_ORDER);
    // Affichage du résultat
    echo '<pre>';
    print_r($out);
    echo '</pre>';
    ?>
    Julp.

Discussions similaires

  1. [RegEx] Pb avec exp régulière
    Par hansaplast dans le forum Langage
    Réponses: 3
    Dernier message: 30/08/2006, 08h38
  2. Réponses: 4
    Dernier message: 09/03/2006, 18h06
  3. [EXP] Evaluation dans une expression régulière
    Par SergentHeinz dans le forum Langage
    Réponses: 7
    Dernier message: 10/11/2005, 18h17
  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