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 :

Remplacer un mot par un autre [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Par défaut Remplacer un mot par un autre
    Bonsoir,

    Je veux remplacer les mots numéro, numéros (minuscule ou majuscule, avec ou sans accent) par N°

    En javascript je fera

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var reg = /NUMEROS?/g;
    expression = expression.replace(reg, "N°");
    Mais en PHP, je n'y arrive pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $reg = 'NUMEROS';
    $expression = eregi_replace($reg, "N°", $expression);
    Même si je mets "NUMEROS" dans $expression ça ne fonctionne pas.

    Merci pour vos lumières.

  2. #2
    Membre expérimenté
    Homme Profil pro
    DSI interne
    Inscrit en
    Juin 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DSI interne
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2011
    Messages : 197
    Par défaut
    Bonsoir,

    Peut être devrais tu utiliser la fonction strtr.

    Ce qui pourrait donner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $expression = 'NUMEROS';
    echo $expression."<br />";
    $remplacements = array('NUMEROS' => 'N°');
    $expression = strtr($expression, $remplacements);
    echo $expression;
    ?>
    Grâce à cette fonction tu peut même faire plusieurs modification sur une même chaine de caractère grâce au array dans $remplacement.


    Bien à toi en espérant t'avoir aidé.

  3. #3
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Les expressions régulières avec php c'est preg...

    Tu peux utiliser aussi strtr comme indiqué par MinDBuSteR mais à savoir que cette fonction n'est pas compatible utf-8. Par contre str_replace est compatible avec tous les encodages.

  4. #4
    Membre très actif Avatar de hazamor
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 179
    Par défaut 2 solutions (avec preg_replace et eregi_replace)
    Voilà 2 solutions (avec preg_replace et eregi_replace):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $expression='NUMEROS';
    $exp_resultat = preg_replace('!num[eé]ros!i', "N& #176;", $expression);
    echo $exp_resultat;
     
     
    echo '<br>';
    $expression='NUMEROS';
    $reg = 'NUM[eé]rOS';
    echo $expression = eregi_replace($reg, "N& #176;", $expression);
    NB: Veillez supprimer l'espace entre & et #, j'ai le mis car il est transformé directement en ° lors de l'envoi de réponse

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    faut pas oublier de rajouter les limites de mot \b

  6. #6
    Membre éprouvé Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Par défaut
    Merci à vous

    J'ai donc suivi l'excellent lien de ABCIWEB et j'ai fait comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $mots = "numero";
    $expression = preg_replace('`\b('.$mots.')[sx]?\b`si', "N°", $expression);

  7. #7
    Membre très actif Avatar de hazamor
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 179
    Par défaut
    Citation Envoyé par lodan Voir le message
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $mots = "numero";
    $expression = preg_replace('`\b('.$mots.')[sx]?\b`si', "N°", $expression);
    ça ne marche pas avec les accents, vous pouvez le tester avec


  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    pour les accent il faut rajouter l'option u, l'option s et i ne sert a rien ici, faut pensé faire un preg_quote sur le $mot, je te déconseille vivement de mettre l'opérateur d'exécution en délimiteur

  9. #9
    Membre très actif Avatar de hazamor
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 179
    Par défaut N'abuser pas l'utilisation de système de vote !
    Citation Envoyé par hazamor Voir le message
    ça ne marche pas avec les accents, vous pouvez le tester avec


    L'un de membres de ce forum a voter contre mon dernier réponse, je croix qu'il n'est pas d'accord. Mais je défend mon réponse et je le rappel par la demande de @lodan

    Citation Envoyé par lodan Voir le message
    Je veux remplacer les mots numéro, numéros (minuscule ou majuscule, avec ou sans accent) par N°
    et je demande à lui de tester avant voter !
    En plus j'aime bien que le modérateur de faire attention au abus d'utilisation de vote!!
    j'aime bien que vous ne supprimer pas ce message car c'est un point important et je vais partir de ce message pour poser le problème cet abus au forum d'évolutions de club (http://www.developpez.net/forums/f80...olutions-club/)

  10. #10
    Invité
    Invité(e)
    Par défaut
    Je corrigerais comme suit (les mots au pluriel avant ceux au singulier) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    $chaine_corrigee2 = str_ireplace(array('numeros','numéros','numero','numéro'),'N°',$chaine_depart);
    ?>
    en effet (exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    $chaine_depart = 'le numéro des NUméros est un NUMERO à numéROS';
    echo $chaine_depart.'<br />';		// le numéro des NUméros est un NUMERO à numéROS
    $chaine_corrigee1 = str_ireplace(array('numero','numeros','numéro','numéros'),'N°',$chaine_depart);	// non
    echo $chaine_corrigee1.'<br />';	// le N° des N°s est un N° à N°S
    $chaine_corrigee2 = str_ireplace(array('numeros','numéros','numero','numéro'),'N°',$chaine_depart); 	// OK
    echo $chaine_corrigee2.'<br />';	// le N° des N° est un N° à N°
    ?>
    Un bémol cependant :
    - "numéroter" va donner "N°ter"
    - "numérotation" va donner "N°tation"
    .....
    La solution est dans les regex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $chaine_depart = 'la numérotation des NUméros est un NUmeRO à numéROS';
    $chaine_corrigee3 = preg_replace('`\b('.'num[eé]ro'.')[s]?\b`i', 'N°', $chaine_depart);
    echo $chaine_corrigee3.'<br />';	// la numérotation des N° est un N° à N°
    ?>
    CQFD
    Dernière modification par Invité ; 03/07/2011 à 13h39.

  11. #11
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 64
    Par défaut
    oui tu as raison sur tous tes points ^^ mea culpa sorry ^^

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

Discussions similaires

  1. Remplacer un mot par un autre par un batch
    Par caballero dans le forum Windows
    Réponses: 3
    Dernier message: 14/06/2007, 10h31
  2. Remplacer un mot par un autre
    Par Olivier Regnier dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 06/04/2007, 23h03
  3. [ms-dos] remplacer un mot par un autre
    Par Spidermeu dans le forum Autres Logiciels
    Réponses: 5
    Dernier message: 28/07/2006, 11h57
  4. Parser une page pour remplaçer des mots par d'autres
    Par HALOMOTO dans le forum Langage
    Réponses: 13
    Dernier message: 13/07/2006, 22h58
  5. Remplacer un mot par un autre dans un fichier
    Par vbcasimir dans le forum Linux
    Réponses: 8
    Dernier message: 25/04/2006, 12h08

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