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 :

trouver toutes les occurences d'un pattern [RegEx]


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2003
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 48
    Points : 30
    Points
    30
    Par défaut trouver toutes les occurences d'un pattern
    Bonjour,

    (j'ai un problème de regex en javascript... j'espère pouvoir poster ici même si ce n'est pas le même langage.)

    J'ai cette phrase :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "  on doit pouvoir garder les espaces   quand même "
    Je dois récupérer chaque mots de cette phrases :
    - si espaces au début -> joindre au premier mot
    - si espaces à la fin -> joindre au dernier mot
    - si plusieurs espaces entres les mots intermédiaires, les joindre à droite (ex: "espaces "

    Pour l'instant j'ai ce pattern :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /^(\s*[^\s]*\s*)([^\s]+\s+)*([^\s]+\s*)$/
    Avec ça je récupère :
    " on"
    "quand "
    "même "


    Et je voudrais récupérer les autres mots intermédiaires !
    " on"
    "doit "
    "pouvoir "
    "garder "
    "les "
    "espaces "
    "quand "
    "même "


    Après plusieurs essais, j'ai remarqué que la deuxième capture ne garde que la dernier motif trouvé.

    Voici mon code JS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    console.log("  on doit pouvoir garder les espaces   quand même ".match(/^(\s*[^\s]*\s*)([^\s]+\s+)*([^\s]+\s*)$/i));
    Est ce possible ?

    Merci

  2. #2
    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
    Ceci pourrait le faire:

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function clean (str)
    {
        return str.replace(/(^\s+)|(\s+$)/g,'').replace(/\s+/, ' ');
    }
     
    clean("   foo   bar   ");

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2003
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 48
    Points : 30
    Points
    30
    Par défaut
    Merci SNAFU mais ceci me supprime simplement les espaces en trop. Ce n'est pas ce dont j'ai besoin, au contraire je veux tous les garder.

  4. #4
    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 vikti Voir le message
    Merci SNAFU mais ceci me supprime simplement les espaces en trop. Ce n'est pas ce dont j'ai besoin, au contraire je veux tous les garder.
    J'avoue ne pas comprendre ce que tu veux faire.
    Tu veux juste enlever les espaces de début et de fin ?

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2003
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 48
    Points : 30
    Points
    30
    Par défaut
    Non je ne veux surtout pas toucher aux espaces justement.

    Ok, je résume :

    A partir de cette phrase :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "  on doit pouvoir garder les espaces   quand même "
    Je veux récupérer un tableau contenant toutes ces strings :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    " on"
    "doit "
    "pouvoir "
    "garder "
    "les "
    "espaces "
    "quand "
    "même "
    Est ce plus clair ? Merci.

  6. #6
    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
    En php, je m'orienterais vers une solution de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
     
    $reg = '/^\s*\S*\s* | \S+\s*$ | \S+\s+/x';
     
    $str = '  on doit pouvoir garder les espaces   quand même ';
    preg_match_all($reg, $str, $m);
    var_dump($m[0]);

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mars 2003
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 48
    Points : 30
    Points
    30
    Par défaut
    Non toujours pas, il match uniquement les mots suivants :

    " on ", " pouvoir ", " les ", " quand "


    Bon j'ai bricolé un bout de script JS pour palier à ça :

    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
    /*split text into a 2D array [words][chars]*/
     
                // for keep the spaces present at the begining or the end we do that on two steps :
                // 1) isolate the first and the last word.
                // 2) spliting the middle words, keeping all spaces.
                // ... to improve with lookheads maybe.
     
                //1
                for (var i = 0; i < value.length; i++)
                {
                    var t = value.match(/^(\s*[^\s]*\s*)([^\s]+\s+)*([^\s]+\s*)$/i)
                    if (t.length > 1)
                    {
                        first = t[0];            // first word
                        last = t[t.length-1];    // last word
                    }
                }
                //2
                value = value.slice(first.length-1, last.length-1);
                words = value.match(/([^\s]+\s+)/gi);
                words.unshift(first);
                words.push(last);                // all words in an array

    Ça marche très bien. Mais merci de ton aide SNAFU.

  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
    Citation Envoyé par vikti Voir le message
    Non toujours pas, il match uniquement les mots suivants :

    " on ", " pouvoir ", " les ", " quand "
    Pas le temps de faire le js, mais mon code php est testé et la sortie est correcte :

    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
    array(8) {
      [0]=>
      string(5) "  on "
      [1]=>
      string(5) "doit "
      [2]=>
      string(8) "pouvoir "
      [3]=>
      string(7) "garder "
      [4]=>
      string(4) "les "
      [5]=>
      string(10) "espaces   "
      [6]=>
      string(6) "quand "
      [7]=>
      string(6) "même "
    }

  9. #9
    Nouveau membre du Club
    Inscrit en
    Mars 2003
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 48
    Points : 30
    Points
    30
    Par défaut
    Ok, je vais aller voir dans le forum JS si ils ont une idée de comment faire un équivalent de preg_match_all(). J'ai essayé avec le paramètre 'g' mais ça ne donne pas le même résultat.

    Merci de ton aide SNAFU. Bonne continuation.

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

Discussions similaires

  1. Trouver les occurences d'un pattern dans un fichier donné
    Par chenwaZi dans le forum Général Java
    Réponses: 9
    Dernier message: 01/05/2015, 08h40
  2. Retrouver toutes les occurences dans un memo
    Par johweb dans le forum Delphi
    Réponses: 2
    Dernier message: 09/06/2006, 14h44
  3. connaitre toutes les occurences d'une chaine
    Par semaj_james dans le forum C
    Réponses: 2
    Dernier message: 11/12/2005, 14h46
  4. Borland C++ 5.5 remplacer toutes les occurences
    Par cdelamarre dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 30/11/2005, 12h23
  5. replace() qui s'applique sur toutes les occurences
    Par Oluha dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/03/2005, 11h27

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