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 :

Extraction chaine de caractères


Sujet :

Langage PHP

  1. #1
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Points : 267
    Points
    267
    Par défaut Extraction chaine de caractères
    Bonjour,

    J'ai un vielle liste d'email, et j'aimerai supprimé les doublons, exemple :

    frkjfojfkro@jjjfjf.com; frferfer@tty.tn; alex bizou (jkgjkgjg@toto.com)

    Comment faire pour supprimer "alex bizou" et garder un affichage comme ceci :

    frkjfojfkro@jjjfjf.com
    frferfer@tty.tn
    jkgjkgjg@toto.com


    Si quelqu'un pouvait d'aider svp ?

    Merci beaucoup

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu peux faire un explode - array_unique - implode

  3. #3
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Points : 267
    Points
    267
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Tu peux faire un explode - array_unique - implode
    ok si je comprend je fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $liste = "frkjfojfkro@jjjfjf.com; frferfer@tty.tn; alex bizou (jkgjkgjg@toto.com)";
    $liste = explode (';',$liste);
    array_unique($liste) 
    $liste = implode ('\n',$liste)
    ;

    Et dans le cas où j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $liste = "alex bizou (jkgjkgjg@toto.com); jkgjkgjg@toto.com"
    J'ai 2 fois la meme adresse email, mais ca me supprimera pas le doublon ?

  4. #4
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    il faudrait analyser la chaine avec une expression régulière.
    est-ce que c'est toujours la meme forme "nom (email)" ?

  5. #5
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Points : 267
    Points
    267
    Par défaut
    Citation Envoyé par sabotage Voir le message
    il faudrait analyser la chaine avec une expression régulière.
    est-ce que c'est toujours la meme forme "nom (email)" ?
    j'ai 2 formes uniques :
    1er forme juste "email'
    2eme forme "nom (email)"

    Les 2 mélangés ex :

    dddd@tu.nbe; bob (uut@li.com); ffff@yahoo.fr

  6. #6
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Points : 1 256
    Points
    1 256
    Par défaut
    Ce code devrait marcher

    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
     
    <?php
     
    $liste = "frkjfojfkro@jjjfjf.com; frferfer@tty.tn;"; 
    $liste .= "alex bizou (jkgjkgjg@toto.com); jkgjkgjg@toto.com; ";
     
    // Supprimer les espaces
    $liste = str_replace(" ", "", $liste); 
     
    // Lister les mails
    $liste = explode (';',$liste);
     
    // Recuperer les mails
    for($i = 0; $i < count($liste); $i++) {
       preg_match("/\([^\(\)]*\)/", $liste[$i], $matches);
       if( count($matches) > 0) {
           $liste[$i] =  $matches[0];
           $liste = str_replace("(", "", $liste); 
           $liste = str_replace(")", "", $liste); 
       }
    }
     
    // Unique
    $liste = array_unique($liste);
     
    // Fusion
    $liste = implode ('\n',$liste);
     
    var_dump($liste);
    echo $liste;
    + bonne chance

  7. #7
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Points : 267
    Points
    267
    Par défaut
    Citation Envoyé par mr_samurai Voir le message
    Ce code devrait marcher

    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
     
    <?php
     
    $liste = "frkjfojfkro@jjjfjf.com; frferfer@tty.tn;"; 
    $liste .= "alex bizou (jkgjkgjg@toto.com); jkgjkgjg@toto.com; ";
     
    // Supprimer les espaces
    $liste = str_replace(" ", "", $liste); 
     
    // Lister les mails
    $liste = explode (';',$liste);
     
    // Recuperer les mails
    for($i = 0; $i < count($liste); $i++) {
       preg_match("/\([^\(\)]*\)/", $liste[$i], $matches);
       if( count($matches) > 0) {
           $liste[$i] =  $matches[0];
           $liste = str_replace("(", "", $liste); 
           $liste = str_replace(")", "", $liste); 
       }
    }
     
    // Unique
    $liste = array_unique($liste);
     
    // Fusion
    $liste = implode ('\n',$liste);
     
    var_dump($liste);
    echo $liste;
    + bonne chance

    Ca fonctionne, merci beaucoup

  8. #8
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Points : 267
    Points
    267
    Par défaut
    En fait cela fait pas vraiment ce que je voudrait ,

    par exemple si j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     "ddddd@yagoo.gt; tyure@bob.com;alex bizou (jkgjkgjg@toto.com)"
    Je voudrais que cela me retourne :

    ddddd@yagoo.gt; tyure@bob.com;jkgjkgjg@toto.com


    En gros que dans "alex bizou (jkgjkgjg@toto.com)" cela me supprime "alex bizou" et qu'il reste "jkgjkgjg@toto.com"

  9. #9
    Membre actif Avatar de Jihnn
    Inscrit en
    Décembre 2005
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 330
    Points : 273
    Points
    273
    Par défaut
    J'aurais fait un truc du genre avec preg_match_all :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
        $string = "jkgjkgjg@toto.com;ddddd@yagoo.gt; tyure@bob.com;alex bizou (jkgjkgjg@toto.com)";
     
        preg_match_all('#(?<=^|;)\s*(?:([^@]+@[^\\.]+\\.[a-z]+)|[^\\(]+\\(([^@]+@[^\\.]+\\.[a-z]+)\\))(?=;|$)#i', $string, $email);
        $email = array_unique(array_map('trim', array_merge($email[1], $email[2])));
     
        if (($key = array_search(null, $email)) !== false)
            unset($email[$key]);
     
        $emails = implode(';', $email);
        echo $emails; // jkgjkgjg@toto.com;ddddd@yagoo.gt;tyure@bob.com

  10. #10
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Points : 267
    Points
    267
    Par défaut
    Citation Envoyé par Jihnn Voir le message
    J'aurais fait un truc du genre avec preg_match_all :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
        $string = "jkgjkgjg@toto.com;ddddd@yagoo.gt; tyure@bob.com;alex bizou (jkgjkgjg@toto.com)";
     
        preg_match_all('#(?<=^|;)\s*(?:([^@]+@[^\\.]+\\.[a-z]+)|[^\\(]+\\(([^@]+@[^\\.]+\\.[a-z]+)\\))(?=;|$)#i', $string, $email);
        $email = array_unique(array_map('trim', array_merge($email[1], $email[2])));
     
        if (($key = array_search(null, $email)) !== false)
            unset($email[$key]);
     
        $emails = implode(';', $email);
        echo $emails; // jkgjkgjg@toto.com;ddddd@yagoo.gt;tyure@bob.com

    Ca fonctionne, merci beaucoup

  11. #11
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Points : 267
    Points
    267
    Par défaut
    Citation Envoyé par Jihnn Voir le message
    J'aurais fait un truc du genre avec preg_match_all :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
        $string = "jkgjkgjg@toto.com;ddddd@yagoo.gt; tyure@bob.com;alex bizou (jkgjkgjg@toto.com)";
     
        preg_match_all('#(?<=^|;)\s*(?:([^@]+@[^\\.]+\\.[a-z]+)|[^\\(]+\\(([^@]+@[^\\.]+\\.[a-z]+)\\))(?=;|$)#i', $string, $email);
        $email = array_unique(array_map('trim', array_merge($email[1], $email[2])));
     
        if (($key = array_search(null, $email)) !== false)
            unset($email[$key]);
     
        $emails = implode(';', $email);
        echo $emails; // jkgjkgjg@toto.com;ddddd@yagoo.gt;tyure@bob.com

    Merci bcp pour la solution elle fonctionne, j'aimerai essayer de la comprendre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (?<=^|;)\s*(?:([^@]+@[^\\.]+\\.[a-z]+)|[^\\(]+\\(([^@]+@[^\\.]+\\.[a-z]+)\\))(?=;|$)

    Je bloque dès le début, que signifie ???

Discussions similaires

  1. Extraction chaine de caractères entre deux |
    Par urbanspike dans le forum Débuter
    Réponses: 3
    Dernier message: 04/10/2012, 16h46
  2. [XL-2007] PB : Extraction chaine de caractères
    Par chaser_T dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/12/2011, 16h43
  3. Extraction chaine de caractère (RegExp)
    Par laclac dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 23/09/2009, 00h29
  4. Réponses: 4
    Dernier message: 10/09/2008, 13h53
  5. extractions chaine de caractères
    Par blackstrobe dans le forum Linux
    Réponses: 2
    Dernier message: 10/09/2007, 21h21

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