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 :

Expression régulière pour supprimer des doublons [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 42
    Points : 17
    Points
    17
    Par défaut Expression régulière pour supprimer des doublons
    Salut,

    j'ai un peu de mal avec les expressions régulières,
    voici ma demande et je ne sais pas si c'est possible,

    j'aimerai que dans un texte, n'importe quel caractère ecrit x fois à la suite soit remplacé par qu'un seul item,

    par ex, youpiiiiiiiiiiiiiiii, devienne youpi,
    ou bien j'ai une question ???????? devienne j'ai une question ?

    il faudrait aussi pouvoir ne pas supprimer les lettres qui sont doublées en français, les ss, tt, nn, mm...
    par contre sss doit devenir s.

    Merci à vous.

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Salut !

    alors pour la première, c'est facile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $apres = preg_replace('<(.)\\1+(?!\\1)>', '$1', $avant);
    pour le second cas, ça va être un peu plus difficile
    le plus simple est d'en faire deux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $patterns = array();
    $replaces = array();
     
    //pour les lettres doublées :
    $patterns[] = '<([nmst])\\1{2,}(?!\\1)>i'
    $replaces[] = '$1';
     
    //pour les autres :
    $patterns[] = '<([^nmst])\\1+(?!\\1)>i'
    $replaces[] = '$1';
     
    $apres = preg_replace($patterns, $replaces, $avant);

    je t'explique :
    <(.)\\1+(?!\\1)>
    (.) : on récupère un caractère (n'importe le quel) '.' et on le mémorise '(' ... ')'
    \\1+ : ensuite on veut le même caractère '\\1' au moins une fois de plus '+'
    (?!\\1) il faut que la suite '(?' ... ')' ne soit pas '!' le caractère récupéré '\\1'

    pour les autres :
    <([nmst])\\1{2,}(?!\\1)>i
    i (à la fin) : insensible à la casse
    ([nmst]) : on récupère soit '[' ... ']' un n, un m, un s ou un t 'nmst' et on mémorise '(' ... ')'
    \\1{2,} : ensuite on veut le même caractère '\\1' au moins deux fois de plus '{2,}'
    (?!\\1) il faut que la suite '(?' ... ')' ne soit pas '!' le caractère récupéré '\\1'


    et
    <([^nmst])\\1{2,}(?!\\1)>i
    i (à la fin) : insensible à la casse
    ([^nmst]) : on récupère un caractère qui n'est pas '[^' ... ']' un n, un m, un s ou un t 'nmst' et on mémorise '(' ... ')'
    \\1{2,} : ensuite on veut le même caractère '\\1' au moins deux fois de plus '{2,}'
    (?!\\1) il faut que la suite '(?' ... ')' ne soit pas '!' le caractère récupéré '\\1'
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 42
    Points : 17
    Points
    17
    Par défaut
    merci beaucoup pour ton aide et d'avoir pris le temps de m'expliquer,
    j'ai essayé ça marche super bien,

    par contre une petite amélioration, comment faire pour que les chiffres ne soient pas prit en compte par ces règles ?

    merci

  4. #4
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    alors

    pour la règle avec le . il suffit de remplacer le . par [^0-9] (tout sauf chiffre de 0 à 9)

    de même pour la règle avec [^nmst] il te suffit de rajouter 0-9 dedans : [^nmst0-9]
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 42
    Points : 17
    Points
    17
    Par défaut
    c'est parfait,

    merci beaucoup,
    en plus d'avoir eu la réponse, j'ai tout compris.

    bonne journée.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Février 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2017
    Messages : 7
    Points : 7
    Points
    7
    Par défaut enlever des lignes doublons à travers plusieurs fichiers txt
    Bonjour ,
    je vois que la question est resolue, pourtant je ne suis pas a meme de tout comprendre.

    Jái de grands fichiers texte (environ 2000 pages chacun ) et je voudrais enlever les phrases doublons a travers PLUSIEURS FICHIERS a la fois.

    Y a t il une regex speciale pour faire cela automatiquement dans la recherche a travers les fichiers?

    Je travaille avec Notepad+, open office et PSPad.

    Merci mille fois pour votre aide. Je suis un peu perdu.

    Stéphane

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

Discussions similaires

  1. [RegEx] expression régulière pour remplacer des balises
    Par oceanbigone dans le forum Langage
    Réponses: 5
    Dernier message: 29/05/2007, 18h11
  2. expression régulière pour splitter des données suivant un masque
    Par LEK dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 18/04/2007, 07h02
  3. Réponses: 2
    Dernier message: 27/02/2007, 09h16
  4. [RegEx] Expression régulière pour réduire des URL
    Par kivan666 dans le forum Langage
    Réponses: 6
    Dernier message: 11/06/2006, 21h39
  5. [RegEx] Expression régulière pour trouver des mots
    Par cbroissa dans le forum Langage
    Réponses: 7
    Dernier message: 26/05/2006, 23h39

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