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 Perl Discussion :

[Regex]Remplacement d'un nombre indéfinie de motif


Sujet :

Langage Perl

  1. #1
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut [Regex]Remplacement d'un nombre indéfinie de motif
    Bonjour,

    J'ai un problème avec une expression régulière qui doit me transformer quelque du genre :

    en
    Donc avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $file =~ s#\.B [\"]?([^\"^\n]*)[\"]?\n#<b>$1</b> #g;
    pas de problème (c'est peu être pas terrible mais je fais ce que je peux ), par contre il se peut aussi que le texte soit :
    et j'aimerai obtenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <b>nom</b>, <b>autre</b>, <b>nom</b>
    Et là je calle

    Si quelqu'un a une idée, je suis prenneur.

    Merci

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    tu veux que t'es mot soit mis sous balise <b> à chaque fois que tu rencontres une ligne commencant par .B??? est ce bien cela?

  3. #3
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par djibril
    tu veux que t'es mot soit mis sous balise <b> à chaque fois que tu rencontres une ligne commencant par .B??? est ce bien cela?
    Oui c'est ça, le problème c'est que la ligne peut contenir soit 1 mot (pas de problème) soir une liste de mots séparée par des virgules (là je n'y arrive pas).

    C'est pour transformer les pages man au format HTML. Je connais man2html mais j'ai mis moins de temps à refaire un script (mis à part ce dernier point) que d'essayer de comprendre comment marche cette commande

  4. #4
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par gege2061
    Oui c'est ça, le problème c'est que la ligne peut contenir soit 1 mot (pas de problème) soir une liste de mots séparée par des virgules (là je n'y arrive pas).
    Euh ... pourquoi ne pas tenter de diviser pour régner ?

    Ainsi, tu testes la présence de ton .B, dans un match dans un if, et en cas de succès, à l'intérieur du bloc du if, tu parcours la chaine mémorisée pour lui appliquer un traitement d'insertion des balises <b> et </b> autour de chaque mot, au moyen d'une seconde expression rationnelle.

    C'est peut être moins élégant, mais cela me paraît moins risqué que de tenter de faire plusieurs trucs à la fois (recherche du .B et ajout de plusieurs <b></b>).

    Ce n'est qu'une idée ...
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  5. #5
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par 2Eurocents
    Ainsi, tu testes la présence de ton .B, dans un match dans un if, et en cas de succès, à l'intérieur du bloc du if, tu parcours la chaine mémorisée pour lui appliquer un traitement d'insertion des balises <b> et </b> autour de chaque mot, au moyen d'une seconde expression rationnelle.

    C'est peut être moins élégant, mais cela me paraît moins risqué que de tenter de faire plusieurs trucs à la fois (recherche du .B et ajout de plusieurs <b></b>).
    A mon humble avis, cette solution est à la fois plus simple et plus lisible, donc plus élégante... (et c'est comme ça que je ferais)

    --
    Jedaï

  6. #6
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    En suivant vos conseils à 0.02€, voilà ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      while ((my $l) = ($file =~ m#\.B ([^\n]*)\n#))
      {
        if ($name eq 'Index.'.$num)
        {
          $l =~ s#[\"]?([^ ^,]*)[\"]?#<a href=\"\./$1\.$num\.php\" class=\"lienArticle\">$1</a> #g;
        }
        else
        {
          $l =~ s#[\"]?([^ ^,]*)[\"]?#<b>$1</b> #g;
        }
        $file =~ s#\.B ([^\n]*)\n#$l#;
      }
    En tout cas ça marche, c'est déjà ça

    Si vous avez des commentaires sur la forme, ils sont les bienvenue

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

Discussions similaires

  1. [regex] remplacer les symboles "(" et ")"
    Par Anubis dans le forum Langage
    Réponses: 6
    Dernier message: 08/08/2007, 17h13
  2. [regex]Remplacer un mot exact
    Par leminipouce dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 14/06/2007, 11h49
  3. Javascript : Regex !? Remplacer une chaine dont on ne connait pas la valeur
    Par adrianevens dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/01/2007, 16h03
  4. [Regex] Remplacement d'une chaîne avec $
    Par TSnarfK dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 27/01/2006, 10h44
  5. [vb.net][MaskedTextbox] nombre indéfinis de characteres ?
    Par graphicsxp dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/12/2005, 18h43

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