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 :

Surligner des mots dans un texte


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Inscrit en
    Mars 2009
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 94
    Points : 147
    Points
    147
    Par défaut Surligner des mots dans un texte
    Bonjour à tous,
    avant de poster j'ai effectuer une recherche a mon Pb et j'ai trouvé ce que je désirai à savoir ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo preg_replace( '/('.implode('|', $words).')/i', '<span style="font-weight: bold;background-color:yellow;;">$1</span>'$sequence_br)
    Le Pb est que lorsque ma chaine comporte un </br> entre les acides aminés recherchés et bien preg_replace ne trouve plus les motifs recherché
    Un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MKTFMANESTIQRKWYVVDAEGKTLGRLATVVASVLKGKHK<br/>P<span style="font-weight: bold;background-color:yellow;;">TYTP</span>HVDSGDYVIVINAEKIKLTGNKWNDKIYYKHSGYE<br/>SGL<span style="font-weight: bold;background-color:yellow;;">TETP</span>AKELVVKKPTALVEKAVKGMIPHTSLGRDMFRK<br/>LFVYAGPEHKHQAQQPESLEV
    </td></tr><tr style='background-color:#CCCCFF'><td>Features</td><td>Go annotation <br/>Swiss prot</td></tr></table></table>	</div>
    </div>
    ils trouvent bien les motifs TYTP et TETP mais pas les motifs KHKPT et TPAK car il y a un <br> au milieu de ces motifs.
    Or je ne peux pas enlever ces <br> car sinon la séquence s'écrit sur une seule ligne dans mon tableau .
    Voila avez vous une solution pour mon Pb sachant que le but finale est de mettre en evidence des motifs(les mots clefs) dans la sequence d'acide aminé(ma chaine de caractères)

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 78
    Points : 62
    Points
    62
    Par défaut
    en fait si j'ai bien compris ton $words est un tableau qui contient tes séquences à surligner
    le implode te sert à faire un "ou" dans ta regex ce qui te donne une regex du style : '/(TYTP|TETP|KHKPT|TPAK)/i' et tu vérifies si l'une de ces séquences existe dans la chaîne traitée par le preg_replace ? est-ce directement dans cette chaîne qu'il y a les <br/> ? pourrais-tu nous donner un exemple de chaîne d'origine ?
    car si c'est le cas, je ne vois pas bien où se trouve le problème :/ le preg_match traite toute la chaîne comme si le <br> n'existait pas
    et même si c'est pas le cas, les chaînes devraient être bien traitées quand même :/

  3. #3
    Membre actif
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2008
    Messages : 185
    Points : 225
    Points
    225
    Par défaut
    Bonjour,

    Vu ce qu'il dis, je pense que oui, les <br/> sont dans la chaine d'origine .. mais les preg_* n'ont pas la capacité de les enlever par magie, pour lui c'est des caractères comme des autres ...
    La solution serais de modifier la regexp ... ( Je viens de tester ça sur un testeur de regexp, donc elle est sensée marcher )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (TYTP|TETP|KHKPT|TPAK) # Version actuelle
    (T(<br/>)?Y(<br/>)?T(<br/>)?P|T(<br/>)?E(<br/>)?T(<br/>)?P|K(<br/>)?H(<br/>)?K(<br/>)?P(<br/>)?T|T(<br/>)?P(<br/>)?A(<br/>)?K)
    # Version à obtenir ( et j'utiliserais des # comme délimiteur pour ne pas avoir à échapper tous les /, avec toujours le i en modifier si tu veux )
    En gros, tu lui dis qu'entre chaque lettre, il peux y'avoir un <br/> ou rien ... Pour faire ça je te conseille une fonction qui prends la chaine à trouver, qui parcours les lettres une par une et qui ajoute le (<br/>)? entre chaque. Puis un array_walk sur $words de cette fonction

    Bonne journée.
    LoveAngel :: Meow( );
    Personne ne remarque ce qui marche trop bien. Procrastination, Terry Pratchett

  4. #4
    Membre habitué
    Inscrit en
    Mars 2009
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 94
    Points : 147
    Points
    147
    Par défaut
    Citation Envoyé par LoveAngel Voir le message
    Bonjour,

    Vu ce qu'il dis, je pense que oui, les <br/> sont dans la chaine d'origine .. mais les preg_* n'ont pas la capacité de les enlever par magie, pour lui c'est des caractères comme des autres ...
    La solution serais de modifier la regexp ... ( Je viens de tester ça sur un testeur de regexp, donc elle est sensée marcher )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (TYTP|TETP|KHKPT|TPAK) # Version actuelle
    (T(<br/>)?Y(<br/>)?T(<br/>)?P|T(<br/>)?E(<br/>)?T(<br/>)?P|K(<br/>)?H(<br/>)?K(<br/>)?P(<br/>)?T|T(<br/>)?P(<br/>)?A(<br/>)?K)
    # Version à obtenir ( et j'utiliserais des # comme délimiteur pour ne pas avoir à échapper tous les /, avec toujours le i en modifier si tu veux )
    En gros, tu lui dis qu'entre chaque lettre, il peux y'avoir un <br/> ou rien ... Pour faire ça je te conseille une fonction qui prends la chaine à trouver, qui parcours les lettres une par une et qui ajoute le (<br/>)? entre chaque. Puis un array_walk sur $words de cette fonction

    Bonne journée.
    je viens de tester et ca à l'air de marcher même quand il y a des </br> au milieu des motis.
    Et en effet ma chaine contient des <br> avant la recherche des motifs (mes words) car je recupère les séquences( ma chaine) sur une base de données et je n'ai trouvé aucune autres solutions que d'ajouter des <br> tous les 40 acides aminés sans cela ma séquence s'écrit sur une seule ligne.
    Encore merci.

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/04/2012, 18h00
  2. Réponses: 4
    Dernier message: 09/10/2011, 16h17
  3. [RegEx] Preg_replace des occurences d'un mot dans un texte
    Par bruce-willis dans le forum Langage
    Réponses: 7
    Dernier message: 01/09/2010, 14h13
  4. [RegEx] recuperer des mots dans un texte qui est un code php
    Par hendrix67 dans le forum Langage
    Réponses: 1
    Dernier message: 25/05/2010, 16h11
  5. Recherche des mots dans un texte
    Par psyrio dans le forum Langage
    Réponses: 1
    Dernier message: 27/02/2009, 12h15

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