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_match() et str_replace() [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 264
    Par défaut preg_match() et str_replace()
    Bonjour,

    Je voulais savoir si preg_match() et str_replace() utilisés comme ci-dessous# sont compatibles,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $fichier = str_replace(preg_match("#([0]{1})#", $fichier), "RFQ", $fichier);
    Warning: preg_match() expects parameter 2 to be string, array given in /home/...
    # Les données sont extraites d'un CSV contenant divers tarifs mais seuls les "0" uniques devraient être modifiés en RFQ.

    En vous remerciant

  2. #2
    Fabouney
    Invité(e)
    Par défaut
    Bonjour,

    que vient faire ton preg_match ici ?
    tu en a nullement besoin pour faire ce que tu as à faire.
    un str_replace('0','RFQ',$fichier) suffit amplement.

    $fichier contient quoi ?

    si tu veux que $fichier contienne tout le contenu de ton fichier CSV alors il faut faire un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str_replace('0','RFQ',file_get_contents('chemin_fichier'))
    Si ta besoin de précision.

    P.S : ton erreur est tout à fait normal est très explicite, il attend une variable de type string et tu lui met le retour de la fonction preg_match, donc pas correct.

    Cordialement.

  3. #3
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Salut,
    oui mais à priori ca ne vas pas faire ce que tu veux car la tu remlplaces la valeur de retour de preg_match qui est le nombre de fois où le masque a été trouvé.
    Pourquoi tu n'utilises pas directement preg_replace ?

    [edit]+ 1 pour le str_replace vu la complexité du motif utilisé [/edit]

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 264
    Par défaut
    Oui mais si il ya d'autre tarifs, ex : 10(espace)990->1RFQ(espace)99RFQ est remplacé aussi et la c'est pas bon...

  5. #5
    Fabouney
    Invité(e)
    Par défaut
    Dans ce cas donne le contenu de ton fichier CSV, car sa change tout.

    Cordialement.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 137
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $text = str_replace (";0;",";RFQ;",$text);
    Je pense que ça devrait fonctionner. Cela ne te remplacerais que les 0 seuls.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 264
    Par défaut
    c'est pas que je chipote mais le bricolage ça tient pas longtemps, ex :
    si la chaine contient ;0;0;0;0;
    on obtient ;RFQ;0;RFQ;0; parce que le suivant est 0; dont si on recherche tous les 0; et il suffit qu'il y ait un tarif qui se termine par 0 (ex:1 990) et la c'est pas bon non plus...

    Résultat : ;RFQ;RFQ;RFQ;RFQ;1 99RFQ;

    Une regex est donc appropriée.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 137
    Par défaut
    Faut savoir
    Tu veux remplacer tous les 0 de ton fichier (0 => RFQ, 10 =>1RFQ, 506 =>5RFQ6, etc...) ou seulement le "zero" seul (0 => RFQ, 502 => 502, etc...) ?

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 264
    Par défaut
    oui
    seulement le "zero" seul (0 => RFQ, 502 => 502, etc...) ?
    dsl

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 137
    Par défaut
    Oui ? Oui à quoi ?

  11. #11
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Y a surement plus simple mais c'est ce qui me vient à l'esprit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function replace($matches)	{
    	return $matches[0] == '0' ? 'RFQ' : $matches[0];
    }
    $str = preg_replace_callback('`[0-9]+`', 'replace', $str);
    Tu peux aussi faire un simple explode et un strtr sur chaque ligne de ton fichier.

  12. #12
    Membre émérite Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Par défaut
    Perso je t'aurai plus mis ça (pour la fonction de Djakisback) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $str = preg_replace_callback('`[^;]+`', 'replace', $str);

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 264
    Par défaut
    oui ça fonctionne mieux comme ça.

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

Discussions similaires

  1. pb str_replace
    Par splouf dans le forum Langage
    Réponses: 4
    Dernier message: 30/01/2006, 18h00
  2. [RegEx] Preg_match -> objectif bbcode !
    Par Thierry8 dans le forum Langage
    Réponses: 2
    Dernier message: 16/12/2005, 17h21
  3. PHP str_replace
    Par carlos20 dans le forum Langage
    Réponses: 14
    Dernier message: 02/12/2005, 15h57
  4. Fonctionnement de la commande 'preg_match'
    Par Trebor dans le forum Langage
    Réponses: 5
    Dernier message: 09/11/2005, 13h03
  5. [RegEx] str_replace qui veut pas replacer
    Par lamoufle dans le forum Langage
    Réponses: 5
    Dernier message: 13/09/2005, 12h37

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