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 les mots entre guillemets [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3
    Par défaut Trouver les mots entre guillemets
    Bonjour à tous,

    Je cherche depuis ce matin comment trouver un groupe de mots entouré par des guillemets, afin de remplacer les espaces entre eux par un autre symbole.

    Voilà ce que j'ai essayé de faire sans succès :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $str_recherche = 'Ceci est "un test". Ou encore "autre chose de" plus.';
    $str_recherche = preg_replace('/"(\w+)"/ue', "str_replace(' ', '||', '\\1')", $str_recherche);
    L'idée serait d'obtenir le résultat suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    // 'Ceci est "un||test". Ou encore "autre||chose||de" plus.
    Si quelqu'un avait une soluce ?

    Merci d'avance,
    Naynay

  2. #2
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    en backslashant tes guillemets dans ta regexp?

    tu \" au lieu de "

  3. #3
    Membre émérite Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Par défaut
    Bonjour,
    Peut-être une solution ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php 
    $str_recherche = 'Ceci est "un test". Ou encore "autre chose de" plus.';
     
    echo  preg_replace('/(".*")/Ue', "stripslashes(str_replace(' ', '||', '$1'))", $str_recherche);
    affiche :
    Ceci est "un||test". Ou encore "autre||chose||de" plus.
    Fred

  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 : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    L'exemple précédent marche, mais :
    - j'évite le .* au maximum
    - j'évite l'option U qui est trop spécifique à php, donc pas portable
    - j'utilise les quotes le plus possible à la place des guillemets pour délimiter les chaînes qui ne doivent pas être interpolées

    donc ma préférence irait à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php
    $str_recherche = 'Ceci est "un test". Ou encore "autre chose de" plus.';
    echo  preg_replace('/("[^"]+")/e', 'str_replace(" ", "||", "$1")', $str_recherche);

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3
    Par défaut
    Bonjour,

    Merci à tous pour vos réponses (les 2 dernières fonctionnent),

    Je comprends la solution de Micetf, le "." signifie un méta caractère, et le "*" signifie 0 ou plus. Mais je ne comprend pas bien celle de S.n.a.f.u, je pensais jusqu'alors le le symbole "^" indiquait le début d'une ligne, et là ça marche !?

    En tout cas, merci encore.

    Naynay.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 103
    Par défaut
    Bonjour,

    dans cette expression le ^ signifie l'interdiction (car il est []).
    Le modéle de s.n.a.f.u. recherche une chaîne délimitée par des " mais n'en contenant pas

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

Discussions similaires

  1. [RegEx] trouver mot entre guillemet
    Par markham dans le forum Langage
    Réponses: 10
    Dernier message: 03/03/2015, 13h21
  2. [Regex] Trouver les mots entre certains autres mots
    Par lequebecois79 dans le forum Langage
    Réponses: 0
    Dernier message: 13/02/2012, 21h57
  3. Réponses: 59
    Dernier message: 10/11/2007, 12h49
  4. [RegEx] Trouver les mots en majuscule dans une chaine
    Par Boeing dans le forum Langage
    Réponses: 2
    Dernier message: 16/10/2007, 00h44
  5. Réponses: 29
    Dernier message: 09/08/2007, 16h39

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