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 avec regex


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 277
    Points : 120
    Points
    120
    Par défaut str_replace avec regex
    Bonjour,

    Je cherche à remplacer 20020 par 2A020 ou 20021 par 2A021
    En fait tout ce qui commence par 20 en début de chaine doit se transformer par 2A mais pas après les 2 premiers chiffres dans la chaine

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $val = str_replace("20","2B",$val);
    $val = 20333 donne bien 2A333

    mais $val = 20020 donne 2A02A alors que je veux avoir 2A020

    Une Regex ?

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Si par hasard tes nombres sont toujours précédés du même caractère comme par exemple un espace, tu peux éviter de passer par preg_replace en rusant un minimum:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $val = str_replace(" 20"," 2A", $val);
    Sinon, pour parer à toute éventualité:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $val = preg_replace('~(?<![0-9])20~', '2A', $val);
    (?<![0-9]) est un test arrière négatif (negative lookbehind) qui teste que 20 n'est pas précédé d'un chiffre.

    ou encore si tu sait que tes nombres ne sont ni précédés d'une lettre ni précédés d'un underscore, tu peux utiliser un word boundary \b qui marque la position entre un caractère appartenant à la classe \w (soit par défaut [a-zA-Z0-9_]) et un caractère n'y appartenant pas ou le début ou la fin de la chaîne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $val = preg_replace('~\b20~', '2A', $val);
    Si par début de chaîne tu entends vraiment le début de la chaîne, dans ce cas autant utiliser une ancre de début de chaîne directement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $val = preg_replace('~\A20~', '2A', $val);
    ou encore utiliser la chaîne comme un tableau de caractères:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($val[0] === '2' && $val[1] === '0') $val[1] = 'A';
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 277
    Points : 120
    Points
    120
    Par défaut
    Merci pour tout ces détails, ça fonctionne

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

Discussions similaires

  1. Probleme avec REGEX sous IE
    Par Death83 dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 18/07/2006, 20h02
  2. Problème avec Regex
    Par trihanhcie dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/07/2006, 14h50
  3. Réponses: 2
    Dernier message: 25/05/2006, 11h11
  4. [RegEx] analyseur de requette SQL avec RegEx - [casse tête]
    Par sebbod dans le forum Langage
    Réponses: 2
    Dernier message: 28/03/2006, 10h56
  5. Problème avec RegEx et une Query string
    Par Erakis dans le forum Langage
    Réponses: 6
    Dernier message: 08/11/2005, 15h48

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