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 :

preg_replace chaine interdite


Sujet :

Langage PHP

  1. #1
    Membre confirmé Avatar de IP-Fix
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    421
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 421
    Points : 494
    Points
    494
    Par défaut preg_replace chaine interdite
    Bonjour j'ai eu un tit probleme se soir , bien que contourné à présent, voici le probleme :

    j'ai une chaine qui ressemble à sa : $str='aTbaTbaTb'; ou a , T et b son des string.

    je veux remplacer aTb par "" si T="No Import !"

    donc l'expression reguliere qui viens à l'esprit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_replace("#^a(.*)No Import !(.*)b$#","",$str)
    mais sa ne marche pas , car il prend le dernier b et du coup meme si le second T='ersrs' il serat tout de meme supprimer car il prend le premier a et le dernier b de la chaine 'aTbaTbaTb';

    donc je pensais à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_replace("#^a(.*)(^(a))(.*)No Import !(.*)(^(a))(.*)b$#","",$str)
    mais j'ai du me planter quelques part car s'il ne supprime pas tout , il ne supprime rien ...

    Pour contourner le probleme j'ai explode ma chaine à a , et ensuite sur chacun j'ai fait ma tite recette mais c'est pas super sexy , si quelqu'un à mieux à me proposer je suis preneur.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    C'est pas très clair tout ça ! Cependant, le problème que vous rencontrez est certainement lié au fait que les expressions régulières sont gourmandes par défaut donc l'option U vous sera certainement utile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo preg_replace("#^a(.*)No Import !(.*)b$#U", '', $str);
    La deuxième ne fonctionne pas déjà à cause du ^ qui me paraît mal employée : sa signification est un début de chaîne ou ligne (sans l'option m) ou alors une négation de classe (une classe est un ensemble de caractères exemple : [^0-9], pour un caractère qui n'est pas un chiffre).


    Julp.

Discussions similaires

  1. [AC-2003] propriete nul interdit / chaine vide autorisée
    Par alexane dans le forum Modélisation
    Réponses: 3
    Dernier message: 07/11/2010, 19h48
  2. [RegEx] preg_replace: plantage étrange avec l'option 's' sur longue chaine
    Par Florimond dans le forum Langage
    Réponses: 22
    Dernier message: 24/09/2010, 02h52
  3. [RegEx] Mot interdit, exclusion d'une chaine de caractères
    Par Finnegans dans le forum Langage
    Réponses: 36
    Dernier message: 28/09/2009, 14h36
  4. [RegEx] Répétition d'une chaine de caractères dans un preg_replace
    Par Bladyy dans le forum Langage
    Réponses: 3
    Dernier message: 19/06/2008, 14h29
  5. [RegEx] preg_replace et interdir une chaine
    Par jojo22222 dans le forum Langage
    Réponses: 9
    Dernier message: 19/02/2006, 21h46

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