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

MS SQL Server Discussion :

Utilisation de Regex pour regrouper des emails


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Inscrit en
    Février 2004
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 210
    Points : 103
    Points
    103
    Par défaut Utilisation de Regex pour regrouper des emails
    Bonjour,

    Nous avons d'une part une liste d'email (>1 000 000) :

    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
    CREATE TABLE [dbo].[ListeEmails](
    	[Email] [varchar](100) NOT NULL
    )
     
    insert into ListeEmails VALUES ('toto@gmail.com')
    insert into ListeEmails VALUES ('tonton@gmail.com')
    insert into ListeEmails VALUES ('titi@gmail.com')
    insert into ListeEmails VALUES ('tata@gmail.com')
    insert into ListeEmails VALUES ('toto@yahoo.com')
    insert into ListeEmails VALUES ('tonton@yahoo.com')
    insert into ListeEmails VALUES ('titi@yahoo.com')
    insert into ListeEmails VALUES ('tata@yahoo.com')
    insert into ListeEmails VALUES ('toto@google.fr')
    insert into ListeEmails VALUES ('tonton@google.fr')
    insert into ListeEmails VALUES ('titi@google.fr')
    insert into ListeEmails VALUES ('tata@google.fr')
    insert into ListeEmails VALUES ('patrick@gmail.com')
    insert into ListeEmails VALUES ('pierre@gmail.com')
    insert into ListeEmails VALUES ('jean@gmail.com')
    insert into ListeEmails VALUES ('michel@gmail.com')
    insert into ListeEmails VALUES ('patrick@yahoo.com')
    insert into ListeEmails VALUES ('pierre@yahoo.com')
    insert into ListeEmails VALUES ('jean@yahoo.com')
    insert into ListeEmails VALUES ('michel@yahoo.com')
    insert into ListeEmails VALUES ('patrick@google.fr')
    insert into ListeEmails VALUES ('pierre@google.fr')
    insert into ListeEmails VALUES ('jean@google.fr')
    insert into ListeEmails VALUES ('michel@google.fr')
    insert into ListeEmails VALUES ('sophie@gmail.com')
    insert into ListeEmails VALUES ('marie@gmail.com')
    insert into ListeEmails VALUES ('juliette@gmail.com')
    insert into ListeEmails VALUES ('colette@gmail.com')
    insert into ListeEmails VALUES ('sophie@yahoo.com')
    insert into ListeEmails VALUES ('marie@yahoo.com')
    insert into ListeEmails VALUES ('juliette@yahoo.com')
    insert into ListeEmails VALUES ('colette@yahoo.com')
    insert into ListeEmails VALUES ('sophie@google.fr')
    insert into ListeEmails VALUES ('marie@google.fr')
    insert into ListeEmails VALUES ('juliette@google.fr')
    insert into ListeEmails VALUES ('colette@google.fr')
    et d'autre part une liste de règles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE [dbo].[Regles](
    	[Syntaxe] [nvarchar](50) NOT NULL,
    	[Inclure] [bit] NOT NULL 
    )
     
    insert into Regles VALUES ('@google.fr', 1)
    insert into Regles VALUES ('colette@google.fr', 0)

    A l'aide d'une fonction regex (voir http://msdn.microsoft.com/msdnmag/is...lt.aspx?loc=fr) on teste les emails avec les règles.

    ce que je voudrais c'est avoir la liste des emails respectant les règles.

    dans notre cas de figures je dois obtenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    toto@google.fr
    tonton@google.fr
    titi@google.fr
    tata@google.fr
    patrick@google.fr
    pierre@google.fr
    jean@google.fr
    michel@google.fr
    sophie@google.fr
    marie@google.fr
    juliette@google.fr
    c'est à dire toutes les adresses contenant @google.fr à l'exception de colette@google.fr

    J'espère avoir été clair, merci de me sortir de ce truc qui me casse la tête.

    Nico

  2. #2
    Membre averti Avatar de Shivaneth
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    349
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 349
    Points : 341
    Points
    341
    Par défaut
    Essaye ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT distinct(email) FROM ListeEmails,Regles
    WHERE email like %Regles.Syntaxe% and Regles.Inclure=1
    AND email NOT IN (SELECT distinct(email) FROM ListeEmails,Regles
    WHERE email like %Regles.Syntaxe% and Regles.Inclure=0)
    Mais là je n'utilise pas Regex (normal, je ne sais pas l'utiliser ^^)

  3. #3
    Membre régulier
    Inscrit en
    Février 2004
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 210
    Points : 103
    Points
    103
    Par défaut
    Je te remercie beaucoup pour ton aide !

    voici le résultat avec le regex, ça marche nickel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT DISTINCT ListeEmails.email
    FROM         ListeEmails CROSS JOIN
                          Regles
    WHERE     (dbo.RegexMatch(ListeEmails.email, Regles.Syntaxe) = 1) AND (Regles.Inclure = 1) AND (ListeEmails.email NOT IN
                              (SELECT DISTINCT ListeEmails.email
                                FROM          ListeEmails CROSS JOIN
                                                       Regles
                                WHERE      (dbo.RegexMatch(ListeEmails.email, Regles.Syntaxe) = 1) AND (Regles.Inclure = 0)))

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/10/2012, 08h49
  2. [Notepad++] utiliser regex pour remplacer des caractères
    Par ilood dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 04/02/2007, 04h06
  3. utiliser données texte pour faire des calculs
    Par sarah67 dans le forum Access
    Réponses: 20
    Dernier message: 06/02/2006, 14h09
  4. utiliser un script pour inserer des objets 3D
    Par s_mihai dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/08/2005, 13h52
  5. Utiliser un parser pour extraire des formules
    Par EpOnYmE187 dans le forum C++
    Réponses: 2
    Dernier message: 15/03/2005, 23h55

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