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 :

Concaténation de chiffres dans le remplacement [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 31
    Points : 23
    Points
    23
    Par défaut Concaténation de chiffres dans le remplacement
    Salut à tous,

    Je me casse la tête sur un problème tout bête, à vrai dire je n'avais même pas imaginé que c'en serait un...
    J'ai des liens codés par des chiffres, du type :
    Je voudrais ajouter un zéro à la fin de tous ces liens, dans une base de données.

    J'ai naturellement pensé à une regexp en séparant les liens en deux motifs entre parenthèses et en insérant un "0" entre les deux. Voici ce que ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $link = '<a href="100">link</a>';
    $newlink = preg_replace('/(<a href="\d+)("[^>]*>[^<]+<\/a>)/', "$1"."0"."$2", $link);
    print($newlink);
    // Affiche : ">link</a>
    Mais voilà : ça ne marche pas (sinon je ne serais pas là ), parce que le moteur recherche en réalité le motif 10, puis le motif 2... Or le motif 10 n'existe pas, donc il n'affiche que le motif 2.
    La fonction en elle-même n'est pas en cause, puisque si je remplace le "0" par "a" ou "foo", j'obtiens le résultat voulu.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $link = '<a href="100">link</a>';
    $newlink = preg_replace('/(<a href="\d+)("[^>]*>[^<]+<\/a>)/', "$1"."foo"."$2", $link);
    print($newlink);
    // Affiche : <a href="100foo">link</a>
    Mais dès que j'essaie de concaténer un chiffre, ça fait planter la regexp.
    J'ai essayé plusieurs techniques sans succès, comme de créer une fonction de concaténation que j'ai passée en 2ème paramètre du preg_replace sans plus de succès.
    Et impossible non plus de multiplier par 10 le chiffre, comme dans l'exemple ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $link = '<a href="100">link</a>';
    $newlink = preg_replace('/(<a href=")(\d+)("[^>]*>[^<]+<\/a>)/', "$1".(intval("$2")*10)."$3", $link);
    print($newlink);
    // Affiche : ">link</a>
    Là aussi, pour une raison qui m'échappe totalement, ça ne passe pas.

    Voilà voilà... si vous avez des idées pour contourner ça, je suis preneur !
    Merci d'avance, amis développeurs

  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
    C'est expliqué dans la doc :
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 31
    Points : 23
    Points
    23
    Par défaut
    Merci pour ta réponse, mais ça c'est vraisemblablement pour accéder à la variable $1 définie en dehors de la regexp, et non pour concaténer avec des chiffres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $link = '<a href="100">link</a>';
    $newlink = preg_replace('/(<a href="\d+)("[^>]*>[^<]+<\/a>)/', "${1}0$2", $link);
    print($newlink);
    // Affiche : Notice:  Undefined variable: 1

  4. #4
    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
    Tu as mal recopié
    c'est ' et non "

    $1 ça n'existe pas en PHP.

    Je pense que tu te meprends sur le deroulement des operations.
    Quand tu écris "$1"."foo"."$2", preg_match reçoit e toute facon "$1foo$2".
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 31
    Points : 23
    Points
    23
    Par défaut
    C'est vrai
    Merci !

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

Discussions similaires

  1. concaténation des chiffres dans excel 2007
    Par le sportif dans le forum Excel
    Réponses: 4
    Dernier message: 07/07/2013, 12h01
  2. Recherche Remplacer chiffres dans les tableaux
    Par MDK75 dans le forum VBA PowerPoint
    Réponses: 0
    Dernier message: 16/05/2012, 20h17
  3. Affichage des chiffres dans une phrases arabe
    Par omda dans le forum Oracle
    Réponses: 4
    Dernier message: 30/09/2005, 13h36
  4. Concaténation et format dans une requête
    Par kinaros dans le forum Access
    Réponses: 4
    Dernier message: 10/09/2005, 20h31
  5. Test si il y a des chiffres dans un champs
    Par deaqu1 dans le forum Access
    Réponses: 4
    Dernier message: 14/06/2005, 21h36

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