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 :

remplacement de mot en respectant l'orthographe [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut remplacement de mot en respectant l'orthographe
    salut

    J'ai des chaînes du genre editParameter, deleteParameter, etc. (il s'agit de noms de fonctions)

    Je voudrais remplacer le premier mot par list et que le deuxième soit mis au pluriel (tous les mot sont en anglais). Pour l'exemple ci-dessus je devrais donc obtenir listParameters.

    J'ai tenté ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $string = 'editParameter';
    $res = ereg_replace("([a-z]+)([A-Z][a-z]+)", "list\\2s", $string);
    ça fonctionne correctement dans cet exemple mais si j'ai une chaîne du genre editCategory j'obtiens listCategorys alors que je devrais avoir listCategories. Idem pour editMatch pour lequel je devrais avoir listMatches

    Est-ce que quelqu'un peut m'aider à corriger les problèmes d'orthographe de mon expression ?


    Merci d'avance

    JuTs

  2. #2
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    Faudrait déja que tu recences tout les cas possibles, apres tu viens voir de quel type est ton string, apres tu pourra appliquer le bon regexp pour chaque cas.

    Voila.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    Les cas possible de quoi ? Le premier mot ou les différents pluriel ?

    Pour le premier, je n'ai pas de liste définie.
    Pour le deuxième je ne vois pas d'autres cas que ceux que j'ai indiqué.

  4. #4
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    bah y => ies c'est pas compliqué, mais c'est dans l'autre cas que tu dois faire une liste

    ch => ches ... etc ...

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    Bon, j'ai finalement procédé ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $string = 'editTest';
     
    //remplacement du premier mot par "list"
    $string = ereg_replace("([a-z]+)([A-Z][a-z]+)", "list\\2", $string);
     
    //cas des mots en -y
    $string = ereg_replace("^([A-Za-z]+)(y)$", "\\1ies", $string);
     
    //cas des mots en ch, is, hs, sh, x, z
    $string = ereg_replace("^([A-Za-z]+)(ch|is|s|sh|x|z)$", "\\1\\2es", $string);
     
    //dans les autres cas on ajoute un s à la fin
    $string = ereg_replace("^([A-Za-z]+)([^s])$", "\\1\\2s", $string);

    Je suis ouvert à toute suggestion si quelqu'un à une solution plus courte ou plus simple. Ou si j'ai oublié un cas.

  6. #6
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    c'est pas mal du tout, c'est en tout cas le plus simple.

    par contre je ferai des preg_replace (PCRE) plutot que des EREG.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    Citation Envoyé par Maxoo
    par contre je ferai des preg_replace (PCRE) plutot que des EREG.
    Pourquoi ? C'est plus rapide ?

  8. #8
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    Citation Envoyé par JuTs
    Pourquoi ? C'est plus rapide ?
    Voui !!

    http://www.lumadis.be/regex/tuto_pcre.php#rapide
    lis tout ça si tu veux

    Sinon si tu sais pas comment écrire un regexp en PCRE, je peux te traduire ce que tu as écris en POSIX (ereg)

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    Citation Envoyé par Maxoo
    Pas le temps de lire maintenant mais c'est dans les favoris.


    Citation Envoyé par Maxoo
    Sinon si tu sais pas comment écrire un regexp en PCRE, je peux te traduire ce que tu as écris en POSIX (ereg)
    Je sais PCRE il faut mettre des délimiteur, je dois changer autre chose à part ça ?

  10. #10
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $string = ereg_replace("^([A-Za-z]+)([^s])$", "\\1\\2s", $string);
    devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $string = preg_replace("#^([A-Za-z]+)([^s])$#", $1.$2."s", $string);

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    ok, c'est bon.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/12/2013, 16h40
  2. [RegEx] motif pour remplacer un mot dans du code HTML ...
    Par r-zo dans le forum Langage
    Réponses: 6
    Dernier message: 31/03/2006, 13h31
  3. Par quoi remplacer le mot Démarrer?
    Par sourivore dans le forum Autres Logiciels
    Réponses: 5
    Dernier message: 08/03/2006, 14h08

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