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 :

[Tableaux] Remplacer une seule fois un mot dans un texte.


Sujet :

Langage PHP

  1. #21
    Membre averti Avatar de sohnic
    Femme Profil pro
    bioinfo
    Inscrit en
    Mai 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : bioinfo

    Informations forums :
    Inscription : Mai 2003
    Messages : 426
    Points : 434
    Points
    434
    Par défaut
    J'utilise assez souvent preg_replace sans probleme, mais c'est vrai toujours sur des cas simples (sans limite de remplacement et sur chaine et non des tableaux). Je n'ai fait que te rapporter la doc de php.net sur cette fonction...

    S.

  2. #22
    Membre averti Avatar de sohnic
    Femme Profil pro
    bioinfo
    Inscrit en
    Mai 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : bioinfo

    Informations forums :
    Inscription : Mai 2003
    Messages : 426
    Points : 434
    Points
    434
    Par défaut
    J'utilise assez souvent preg_replace sans probleme, mais c'est vrai toujours sur des cas simples (sans limite de remplacement et sur chaine et non des tableaux). Je n'ai fait que te rapporter la doc de php.net sur cette fonction...

    S.

  3. #23
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Bon et bien , quelle est la syntaxe convenable pour placer un délimiteur dans le preg_replace selon vous? Je cherche un exemple dans la doc php ils n'en donnent pas à priori.

  4. #24
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Bon je me suis inspiré de cette ligne sur le site expreg.com :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chain=preg_replace('`[<br\s?/>]{2,}`','<br/><br/> ',$chain);

    Et j'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $contenu=preg_replace("`[$libelle]{2,}`"," <a href=\"http://{$bob['urlMotClef']}.htm\"> $libelle </a> ",$contenu);};

    Maintenant plus rien ne s'affiche.

  5. #25
    Membre averti Avatar de sohnic
    Femme Profil pro
    bioinfo
    Inscrit en
    Mai 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : bioinfo

    Informations forums :
    Inscription : Mai 2003
    Messages : 426
    Points : 434
    Points
    434
    Par défaut
    Ben, la pour moi c'est une colle.
    Sinon, tu fais un petit script perl, ce langage fait ce genre de remplacement parfaitement.
    $ch=~s/'pomme'/'lien pomme'/; =>premier mot rencontre remplace
    $ch=~s/'pomme'/'lien pomme'/g;=>tous les mots remplaces
    $ch=~s/'pomme'/'lien pomme'/i;=>premier mot, sans distinction de casse
    $ch=~s/'pomme'/'lien pomme'/gi;=>tous les mots sans distinction de casse

    PS: desolé pour le multi-post !

  6. #26
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Perl je ne connais pas du tout, je ne peux pas me lancer dedans juste pour ce script, c'est dommage.

  7. #27
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Je viens d'essayer ça aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $count=1;
    $libelle=$bob[libelle];
    $libelle=" $libelle ";
    $contenu=str_replace("$libelle"," <a href=\"http://www.mobilactif.com/{$bob['urlMotClef']}.htm\"> $libelle </a> ",$contenu,$count);
    Pourtant si j'ai bien lu le manuel PHP ça devrait fonctionner.
    Mais là j'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: Wrong parameter count for str_replace() in /home/discussion/centre-commentaire.php on line 153

  8. #28
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $contenu = preg_replace('`\b'. $libelle .'\b`', '<a href="http://'.$bob['urlMotClef'].'.htm">'. $libelle .'</a>', $contenu, 1);

  9. #29
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    ah non, le compteur d'occurence n'est pas fait pour ça.

    Donc ce doit être preg_replace et j'en reviens à ce délimiteur : quelqu'un connait la bonne syntaxe ??

  10. #30
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Citation Envoyé par psychoBob
    ah non, le compteur d'occurence n'est pas fait pour ça.

    Donc ce doit être preg_replace et j'en reviens à ce délimiteur : quelqu'un connait la bonne syntaxe ??
    délimiteur... ? Attention au vocabulaire, ca évite à tout le monde de tourner autour du pot ! C'est un paramètre.

  11. #31
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    ok, j'ai repris le mot anglais c'est pour ça.

    j'ai essayé ça pour voir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $libelle=$bob[libelle];
    $libelle=" $libelle ";
    $trans = array("$libelle" => "< href=\"http://$libelle.htm\">$libelle</a>");
    strtr("$contenu",$trans);
    ça n'affiche rien


    J'essaye ton code, Mr N .

  12. #32
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    ça fonctionne !!!! T'es balaise ! Enfin pour moi, pour les autres je sais pas

    Dans ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $contenu = preg_replace('`\b'. $libelle .'\b`', '<a href="http://'.$bob['urlMotClef'].'.htm">'. $libelle .'</a>', $contenu, 1);
    Que signifie :
    1) \b'.
    Cela marque les espaces ?
    2) Pourquoi place tu des . avant et après chaque variable?
    3) Pourquoi des ' et pas des " ?

  13. #33
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    1)
    http://php.net/reference.pcre.pattern.syntax.php
    http://expreg.com/ancrages.php

    2)
    Concaténation de chaine

    3)
    Simple préférence

  14. #34
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Bon alors là je regarde le lien n° 2 :

    Il est écrit :
    \B Indique ce qui n'est pas une limite de mot dans une chaîne de caractères


    Aussi ce doit être possible de faire en sorte que le mot pommes se voit remplacer par le lien vers le mot pomme, au singulier, même si dans ma liste de mot je n'ai que pomme au singulier.

    Genre '`\b'.$libelle.'\B`' avec un s après le \B, mais j'ai peur d'écrire des trucs un peu trop exotiques.

  15. #35
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    et pommeau ?

  16. #36
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Points : 332
    Points
    332
    Par défaut
    je crois que les ` c un motif en regex - non ?

  17. #37
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Bien on peut en laisser échapper quelques un ça n'est pas trop grave, il y a quand même beaucoup moins de mots qui se terminent par x que par s au pluriel. D'ailleur je n'en ai même pas dans ma liste de 500 mots je crois.

    **edit**

    Bon quoi qu'il en soit c'est déjà bien comme, il sera toujours temps d'en remettre une couche par la suite.

    Merci à tous !

  18. #38
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Je te parle pas de singulier x / s
    tu porpose le pattern \bpomme\B afin de pouvoir récupérer pomme et pommes. Mais mon petit doigt me dit -- mais il est pas très fort en regexp -- que tu risques de récupérer aussi pommeau, qui n'a plus ou moins rien à voir avec une pomme.

    De plus si pomme et le dernier mot de la phrase, alors tu le récupérera pas car . (fin de phrase) est un délimiteur de mot.

  19. #39
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Ah d'accord.
    En fait c'est loin d'être complètement au point c'est sur : Deux liens de suite et ça ne fonctionne pas car le < du lien deux touche le mot précédent, donc ça ne correspond plus au masque.

    Idem pour les pluriels et pour les débuts de phrase ou pour les apostrophes (ex : l'Allemagne').

    (très) loin d'être parfait donc, mais quand même utile, ça vaudra le coup de l'améliorer.

    Eventuellement je peux créer une table qui comporte la liste des mots clefs plus leur variante avec majuscule et pluriel.

    Ca doit pas mal tirer sur le serveur tout ça, mais quand je teste en ligne, y compris avec des pages très longue, ça ne ralentit pas plus que ça (je suis tout seul me direz vous).

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [RegEx] Avancer une balise d'un mot dans un texte
    Par patbus dans le forum Langage
    Réponses: 2
    Dernier message: 12/01/2014, 22h49
  2. Remplacer une seule fois ave preg_replace ?
    Par JiB@ dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 25/06/2011, 09h47
  3. Réponses: 2
    Dernier message: 22/07/2008, 17h16
  4. Réponses: 13
    Dernier message: 18/07/2006, 23h06
  5. Réponses: 7
    Dernier message: 01/02/2006, 15h49

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