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 : Différence en $$ et \n [perl6]


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Homme Profil pro
    Statisticien
    Inscrit en
    Novembre 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Novembre 2010
    Messages : 122
    Par défaut Regex : Différence en $$ et \n
    Bonjour,

    Dans Parsing with Perl6 Regexes and Grammar p20 Lenz dit que $$ match les fin de ligne, donc pour une string multi-line, il détecte les \n. Il donne comme exemple "Some\nlines" qui est matchée deux fois "Some^\nlines^".
    Je ne comprends donc pas pourquoi la grammaire OrgMode ne fonctionne pas, alors que la OrgMode2 fonctionne.
    La seule différence étant de remplacer $$ par \n.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #!/usr/bin/env perl6
     
    use v6;
    use Grammar::Tracer;
     
    grammar OrgMode {
        rule  TOP       { ^ <tasks> $ }
        token tasks     { <task>+ %% $$}
        token task      { X .+? EOT }
    }
     
    grammar OrgMode2 {
        rule  TOP       { ^ <tasks> $ }
        token tasks     { <task>+ %% \n}
        token task      { X .+? EOT }
    }
     
    my $file =
    "X header 1 EOT
    X header 2 EOT"
    ; 
     
    OrgMode.parse($file);
    OrgMode2.parse($file);

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 987
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 987
    Par défaut
    Je pense que OrgMode ne fonctionne pas car nul part le saut de ligne n'y figure et celui-ci n'est jamais consommé. Ce n'est pas le cas de OrgMode2 qui lui va le consommer grâce au token tasks.

  3. #3
    Membre confirmé

    Homme Profil pro
    Statisticien
    Inscrit en
    Novembre 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Novembre 2010
    Messages : 122
    Par défaut
    En effet, et l'on peut réécrire OrgMode en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    grammar OrgMode {
        rule  TOP       { ^ <tasks> $ }
        token tasks     { <task>+ %% $$}
        token task      { \n? <( X .+? EOT }
    }

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

Discussions similaires

  1. Réponses: 16
    Dernier message: 21/04/2016, 13h52
  2. Différence entre un "bidouilleur" et un Pro ?
    Par christ_mallet dans le forum Débats sur le développement - Le Best Of
    Réponses: 290
    Dernier message: 28/11/2011, 11h53
  3. regex : différence entre Perl et Python
    Par rambc dans le forum Général Python
    Réponses: 3
    Dernier message: 08/01/2009, 21h53
  4. [Regex] Différence entre *.? et .*
    Par topolino dans le forum Windows Forms
    Réponses: 1
    Dernier message: 17/04/2008, 14h04
  5. Réponses: 3
    Dernier message: 07/05/2002, 17h06

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