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 :

Erreur avec ereg_replace()


Sujet :

Langage PHP

  1. #1
    darkloy
    Invité(e)
    Par défaut Erreur avec ereg_replace()
    Bonjour,

    Mon point faible comme beaucoup de dev...
    Je recherche dans un fichier de la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    nom|toto
    prenom|titi
    age|12
    et je voudrais, au moyen de ereg_replace() (ou autre), modifier par exemple les données après le pipe de age, mais je connais pas forcement la valeur de la donnée actuelle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $content = ereg_replace($arg."[[:alnum:]])*\s)",$arg.'|'.$newVal,$content);
    Mais ça ne marche pas...

  2. #2
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    Je pense qu'il est plus "optimal" d'utiliser la fonction explode() qui retourne un tableau de chaînes.

    Cet exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $content = 'Age|12';
    $newVal  = '13';
     
    $tab=explode('|',$content);
    if(count($tab)==2) {
    	$newContent = $tab[0].'|'.$newVal;
    	echo "<dl>\n";
    	echo '<dt>Valeur actuelle</dt><dd>'.$tab[0].'|'.$tab[1]."</dd>\n";
    	echo '<dt>Nouvelle valeur</dt><dd>'.$newContent."</dd>\n";
    	echo "</dl>\n";
    }
    Affichera
    Valeur actuelle
    Age|12

    Nouvelle valeur
    Age|13

  3. #3
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    string ereg_replace ( string $pattern , string $replacement , string $string )

    Avertissement
    Cette fonction est OBSOLETE depuis PHP 5.3.0. Nous vous encourageons vivement à ne plus l'utiliser.


    http://php.net/manual/fr/function.ereg-replace.php






    Je suppose que l’affichage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nom|toto
    prenom|titi
    age|12
    que tu présentes traduit une chaîne
    avec des fins de lignes.

    J’ai donc pris comme chaîne à transformer:
    "nom|toto\nprenom|titi\r\nage|12"


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    $s = "nom|toto\nprenom|titi\r\nage|12" ;
    echo $str.'<br/><br/>';
    $s = preg_replace('~(nom\|\w+\r?\nprenom\|\w+\r?\nage\|)(\w+)~','${1}76590',$s);
    echo $s;
    ?>

    Résultat


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nom|toto prenom|titi age|12
     
    nom|toto prenom|titi age|76590

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    je ne connaissais pas le syntaxe ${1} pour eviter l'accolement des chiffres à l'indice du match, j'aurasi appris quelquechose.
    Dans ce ca de figure je l'aurais contourné plus simplement avec des parenthèses non capturantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php 
    $chaine="nom|toto\
    renom|titi
    age|12";
     
    $reg="~(?:age\|)(\d+)~m";
    $s = preg_replace($reg,'76590',$chaine);
    echo $s;
    ?>

    [edit] et ça ne fonctionne pas

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    c'est curieux les parenthèses non capturantes ne fonctionnent pas mais les lookarounds oui ..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php 
    $chaine="nom|toto
    renom|titi
    age|12";
     
    $reg="~(?<=age\|)\d+~";
    $s = preg_replace($reg,'76590',$chaine);
    echo $s;
    ?>

Discussions similaires

  1. erreur avec ereg_replace
    Par thor76160 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 21/06/2010, 20h49
  2. [RegEx] obtention d'une erreur avec ereg_replace()
    Par jiojioforever dans le forum Langage
    Réponses: 6
    Dernier message: 28/05/2007, 10h12
  3. [Débutant][Conception] Erreur avec une classe interne
    Par Devil Redneck dans le forum Général Java
    Réponses: 5
    Dernier message: 11/06/2004, 15h45
  4. Erreur avec les ADO
    Par megane dans le forum Bases de données
    Réponses: 7
    Dernier message: 08/03/2004, 21h37
  5. Erreur avec WM_COMMAND (BN_CLICKED)
    Par cyberlewis dans le forum Windows
    Réponses: 2
    Dernier message: 09/02/2004, 00h25

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