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 :

str_replace() une fois


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2008
    Messages : 519
    Points : 311
    Points
    311
    Par défaut str_replace() une fois
    Bonjour,

    J'utilise la fonction str_replace() pour créer un texte à trous.

    Je voudrais savoir si il était possible de remplacer la chaine 1 fois,

    exemple :

    $chaine = "Bonjour, je suis ..., je ..."

    J'utilise la fonction str_replace() pour remplacer le "je", mais je voudrais remplacer uniquement le 1er.

    Possible ?, Comment ?

    Merci

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Un petit tour sur la documentation : str_replace a un 4eme paramètre :

    count
    Note: Si fourni, contiendra le nombre de recherches et d'occurrences à remplacer.

  3. #3
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Un petit tour sur la documentation : str_replace a un 4eme paramètre :
    count
    Note: Si fourni, contiendra le nombre de recherches et d'occurrences à remplacer.
    Malheureusement, c'est un cas de mauvaise traduction de la doc (je m'y suis déjà fait prendre) : $count contiendra le nombre de recherches et d'occurences remplacées... Voir la page en anglais :
    Note: If passed, this will hold the number of matched and replaced needles.
    Pour limiter le nombre de remplacements à effectuer, il faut utiliser preg_replace

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2008
    Messages : 519
    Points : 311
    Points
    311
    Par défaut
    Ah, j'avais essayé le 4ème paramètre et ça marchait pas :s

    La avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_replace("/$valeur_with/", "[res_here[$i]]", $content, 1);
    Il me sort l'erreur
    Warning: preg_replace() [function.preg-replace]: Unknown modifier 'h' in /home/myschool/www/apps_creation_tat.php on line 181
    Une idée ?

    Merci

  5. #5
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    Dans la variable $valeur_with, tu as le caractère '/'. or, c'est ton délimiteur de l'expression régulière... Il faut donc que tu choisisse un autre délimiteur, absent de ta variable (exemples : @, #, ¤ : "¤$valeur_with¤"), ou alors que tu échappes tous les délimiteurs présents dans ta variable si tous les caractères peuvent y être utilisés.

  6. #6
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2008
    Messages : 519
    Points : 311
    Points
    311
    Par défaut
    Citation Envoyé par Eusebe Voir le message
    ou alors que tu échappes tous les délimiteurs présents dans ta variable si tous les caractères peuvent y être utilisés.
    Bonjour, je ne vois pas comment échapper tous les délimiteurs.

    Pourquoi faut il utiliser des délimiteurs avec cette fonction et pas avec str_replace() ?

    Merci

  7. #7
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 487
    Points : 5 134
    Points
    5 134
    Par défaut
    Parce que c'est une expression régulière

  8. #8
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2008
    Messages : 519
    Points : 311
    Points
    311
    Par défaut
    Re,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $var = preg_replace("`[hide]test[/hide]`", "[res_here[0]]", [hide]test[/hide], 1);
    il me retourne un $var égal à [hide]test[/hide]

  9. #9
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    Les crochets sont des éléments signifiants dans une expression régulière, il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $var = preg_replace('`\[hide\]test\[/hide\]`', '[res_here[0]]', '[hide]test[/hide]', 1);
    Si les expressions régulières te paraissent trop complexes, pour faire le remplacement d'une partie de texte, il reste toujours le couple strpos / substr_replace qui est nettement plus simple à utiliser

  10. #10
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    Autre solution, pas performante, super crade, mais plus simple que les preg ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $chaine='ababababababa';
    $cherche='b';
    $remplace='c';
    $nombreRemplacement=1;
     
    echo $chaine.'<br>';
    echo implode($remplace, explode($cherche, $chaine, $nombreRemplacement));
    http://fr.php.net/fr/explode
    http://fr.php.net/fr/implode

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

Discussions similaires

  1. Modifier le PATH une fois pour toute
    Par elitost dans le forum Linux
    Réponses: 8
    Dernier message: 06/09/2009, 13h21
  2. [Thread]run une fois et plus apres
    Par maxvador dans le forum Concurrence et multi-thread
    Réponses: 4
    Dernier message: 29/12/2004, 15h31
  3. [Initialisation] Remplir une structure une fois
    Par Kimael dans le forum Langage
    Réponses: 14
    Dernier message: 08/06/2004, 15h33
  4. Pb : malloc qui marche une fois sur deux .... ?
    Par guillaume_pfr dans le forum C
    Réponses: 14
    Dernier message: 21/07/2003, 09h52

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