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 :

Parcours de chaine de caractères


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 37
    Points : 27
    Points
    27
    Par défaut Parcours de chaine de caractères
    Bonjour
    J'ai une chaine sous le type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $chaine="watch?v=DANqhe10v4k&feature=related";
    Je veux recuperer le code "DANqhe10v4" qui se situe après "v=" et avant "&feature".

    J'ai pensé à l'utilisation de ereg mais je ne sais pas comment faire pour la parcourir.


    Voila ce que j'ai mis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ereg("[[:alnum:]] * [v=] [[:alnum:]] [&]", $chaine, $tab);

    Cela bien sur ne marche pas.
    Quelqu'un aurait une solution pour ce petit problème s'il vous plait ?
    Merci de votre aide et bonne journée.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 252
    Points : 85
    Points
    85
    Par défaut
    salut,
    essaye un peu: $v= $_GET['v']

  3. #3
    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
    Et si ce n'est pas dans les params de l'url, ceci devrait convenir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    $str = "watch?v=DANqhe10v4k&feature";
    $reg = '/v=([^&]+)&/';
     
    preg_match($reg, $str, $match);
    echo $match[1];

  4. #4
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718

  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
    Oui, mais au niveau performances, je pense que c'est le jour et la nuit...

  6. #6
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    Il me semble effectivement que les assertions sont beaucoup plus rapides ^^ EN plus elles evitent de capturer l'ensemble de la chaine pour rien donc gain de mémoire ^^

  7. #7
    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
    Citation Envoyé par Korko Fain Voir le message
    Il me semble effectivement que les assertions sont beaucoup plus rapides ^^ EN plus elles evitent de capturer l'ensemble de la chaine pour rien donc gain de mémoire ^^
    OK pour le gain de mémoire, mais je croyais le contraire pour les assertions.
    Rontudju, je teste et je reviens !

  8. #8
    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
    Je crois que j'avais raison.

    Voici mon protocole de test :

    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
     
    <?php
    $str = "watch?v=DANqhe10v4k&feature";
     
    for ($j=1; $j<5; $j++) {
     
        $reg = '/v=([^&]++)&/';
        $found = 0;
        $start = microtime(true);
        for ($i=1; $i<100000; $i++) if (preg_match($reg, $str, $match)) $found ++;
        $end   = microtime(true);
        printf ("Temps 1 = %0.2f pour %d matchings\n", $end-$start, $found);
     
        $reg = '/(?<=v=)[^&]*/';
        $found = 0;
        $start = microtime(true);
        for ($i=1; $i<100000; $i++) if (preg_match($reg, $str, $match)) $found ++;
        $end   = microtime(true);
        printf ("Temps 2 = %0.2f pour %d matchings\n", $end-$start, $found);
    }
     
    /* Affichage sur ma machine
    
    Temps 1 = 0.90 pour 99999 matchings
    Temps 2 = 0.97 pour 99999 matchings
    Temps 1 = 0.94 pour 99999 matchings
    Temps 2 = 0.97 pour 99999 matchings
    Temps 1 = 0.88 pour 99999 matchings
    Temps 2 = 0.97 pour 99999 matchings
    Temps 1 = 0.89 pour 99999 matchings
    Temps 2 = 0.95 pour 99999 matchings
    
    */

  9. #9
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    Strange car dans ce cas les assertions n'ont pas vraiment d'intérêt lol Au contraire presque :p
    Enfin pas grave ^^ Au moins on est fixé.

  10. #10
    Nouveau membre du Club
    Inscrit en
    Décembre 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 37
    Points : 27
    Points
    27
    Par défaut
    Merci infiniment à vous deux vous me sauvez la vie
    Dernière question pour une chaine du type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $chaine="/featured/channel/auto/video/x9fam3_ffsa-gt-in-dijon-mai-2009_auto"
    j'aimerais extraire ce qui se situe après le terme '/video/' c'est à dire avoir en resultat 'x9fam3_ffsa-gt-in-dijon-mai-2009_auto'. Bien sur en utilisant ereg our preg_match
    Merci et bonne journée

  11. #11
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718

  12. #12
    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
    Citation Envoyé par soulflow Voir le message
    Bien sur en utilisant ereg our preg_match
    ereg est déprécié. Si tu ne veux pas nous fâcher, utilises les fonctions preg.

  13. #13
    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
    Citation Envoyé par Korko Fain Voir le message
    Sans vouloir pinailler, je ferais plutôt ceci :
    pour éliminer ce genre de chaîne (si c'est nécessaire) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $str = '/featured/channel/auto/video/';
    Et si tu peux avoir d'autres chaînes très ressemblantes, autant être plus précis au dépend des perfs, ça jouera à la nanoseconde :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reg = '#video/([^/]++)$#';
    J'ai ajouté un + pour balancer les perfs, mais pour le coup, c'est de la pinaillerie !

  14. #14
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    Oula ++ ?? Connait pas en PCRE ça...
    Et justement j'avais mis * pour ne pas les eliminer mais ne rien capturer

  15. #15
    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
    Citation Envoyé par Korko Fain Voir le message
    Oula ++ ?? Connait pas en PCRE ça...
    Si je me rappelle bien, cela s'appelle "groupement possessif".
    C'est l'équivalent du regroupement atomique, c'est à dire que tout ce qui est capturé l'est pour de bon, sans back reference possible, d'où une amélioration des perfs. A utiliser seulement lorsqu'on est sûr de ce qu'on capture.

    PLus d'infos ici : http://www.regular-expressions.info/possessive.html

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/12/2013, 16h40
  2. [Graphe][Parcours] Chaines de caractères
    Par GyZmoO dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 01/06/2006, 22h38
  3. Réponses: 9
    Dernier message: 17/01/2003, 11h45
  4. Lire Une Chaine De Caractères
    Par Jonathan_Korvitch dans le forum C
    Réponses: 12
    Dernier message: 07/01/2003, 05h37
  5. Réponses: 2
    Dernier message: 06/12/2002, 07h50

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