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 :

supprimer une partie d'une chaine ..


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 7
    Points : 8
    Points
    8
    Par défaut supprimer une partie d'une chaine ..
    Bonjour,
    voici mon problème, j'aimerais supprimer dans une chaine de caractère la sous chaine comprise entre le 5ème et le 6ème guillemet.

    Exemple : ma chaine --> blablabla "blablabla" "blablabla" "blablaAEffacer" blablabla blablabla ... <--

    Puis j'aimerais que ma chaine s'affiche après traitement comme cela : --> blablabla "blablabla" "blablabla" "" blablabla blablabla ... <--


    Je pense qu'une expression régulière pourrait me permettre de réaliser cela mais je n'en suis pas sur car je n'y connais rien du tout en regexp ...

    Merci d'avance pour vos réponses.

  2. #2
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo preg_replace('/((".*?"(\s+)){2})(?2)/', '\1""\3', $str);

  3. #3
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Merci pour ta réponse.

    Pourrais-tu m'expliquer le fonctionnement de cette expression ?
    J'aimerais comprendre et apprendre afin de les réaliser par moi même les prochaines fois.
    La seule chose que je comprend c'est que la fonction preg_replace remplace '/((".*?"(\s+)){2})(?2)/' par '\1""\3' dans la chaine $str ...


    Sinon le resultat n'est pas tout a fait celui attendu mais c'est de ma faute car je ne l'ai pas précisé dans mon premier post.
    En effet cela fonctionne avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $str="blabladivers1 \"blabla divers2\" \"blabla divers3\" \"blabla a effacer\" blabla divers4 \"blabla divers5\" etc ";
    Mais s'il ya quelque chose (du texte qui n'est pas entre guillemet) entre \"blabla divers3\" et \"blabla a effacer\"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $str="blabladivers1 \"blabla divers2\" \"blabla divers3\" blablaentre  \"blabla a effacer\" blabla divers4 \"blabla divers5\" etc ";
    , cela ne marche pas.

    C'est pour cela que je voudrais vraiment remplacer ce qui se trouve précisemment entre le 5ème et le 6ème guillemet par du vide ('\1""\3' dans la regexp) .



    Pour info, j'arrive a faire ce que je veux mais d'une facon qui n'est peut être pas très propre ... enfin je n'ai pas le choix je ne connais pas du tout les expressions regulières pour le moment.

    Voila ce que je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $tab_tmp=explode('"', $str);
    unset($tab_tmp[5]);
    $str=implode('"', $tab_tmp);

  4. #4
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    La solution avec explode() est aussi bien. J'y ai pensé la première fois mais comme tu voulais un regex, j'ai posté un regex.

    Voici un autre regex qui fonctionne pour ce que tu veux:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo preg_replace('/(((".*?")((?!").)+){2})(?3)/', '\1""', $str);
    Assez complexe je pense, et comme il se fait tard, je l'expliquerai demain ; )

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/04/2013, 15h57
  2. [RegEx] Retourner une array sur une partie de la chaine
    Par absurdsystem dans le forum Langage
    Réponses: 2
    Dernier message: 25/04/2010, 16h03
  3. Sélectionner seulement une partie d'une valeur d'une cellule
    Par ArthurO0O dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/08/2007, 11h05
  4. masquer une partie d'une vidéo par une banniere
    Par lezabour dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 16/10/2006, 16h47
  5. copier une partie d'une image vers une autre
    Par gregcat dans le forum Langage
    Réponses: 1
    Dernier message: 14/04/2006, 13h39

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