Perl regexp: négation d'un pattern

Bonjour,

(Perl 5.20 de Jessie: use 5.20.0;)
je cherche à capturer 3 champs dans une ligne ainsi composée:

  1. un préfixe numérique à ignorer
    début deligne/espace/nombre/point espace
  2. un nom à capturer ($1)
    un mot (alphanumérique, tiret) = nom d’un package
  3. une phrase à capturer ($2) = une description
  4. une liste à capurer ($3)
    une liste de noms de fichiers nom.pdf, séparés par une virgule et un ou des espace, terminé en principe par un point, mais parfois une virgule,parfois rien (fin de ligne)
    «nom.pdf, nom2.pdf, … nomx.pdf[.,]\s*\z»

J’échoue à trouver comment interrompre l’identification de la phrase juste avant le premier «nom.pdf», ma regexp ne différencie que le dernier nom.pdf de la liste, englobant les autres dans la description, c’est à dire à exprimer ‘tout sauf $PDF’

Voici la regexp:regexpPDF.txt (869 Octets)

Merci

Juste comme ça, j’aurais cherché une solution du coté de awk, cut, tr perso, plutôt que de faire ça en perl.
D’ailleurs, si ce qui t’intéresse, c’est juste de choper ton $1 et ton $2, et s’ils sont bien entourés d’espaces, un truc genre cut -d" " -f2-3 tonfichier devrait suffire.

Mais bon, sinon, j’ai un peu de mal à voir le problème, tu ne pourrais pas fournir quelques lignes de ton fichier à parser qui posent problème, qu’on comprenne mieux ?

Il s’agit d’une fonction dans un script Perl.

J’ai choisi Perl plut ôt que Bash et ses compagnons, a priori pour sa puissance à traiter du texte, peut-être à tord (la puissance du langage n’étant pas celle du programmeur!)

Voici 3 lignes données par Dumper(@paragraphes) du tableau que je veux exploiter:

(c’est un premier traitement par Perl du fichier texlive:

texmf-dist/doc/texlive/index.html

passé par w3m pour le récupérer au format txt.)

$VAR984 = '984. flashmovie: Directly embed flash movies into PDF files test-beamer-0.pdf,    test-flv.pdf.';
$VAR985 = '985. flipbook: Typeset flipbook animations, in the corners of documents    im01.pdf, im02.pdf, im03.pdf, im04.pdf, im05.pdf, im06.pdf, im0.pdf,    im1.pdf, im10.pdf, im11.pdf, im12.pdf, im13.pdf, im14.pdf, im15.pdf,    im16.pdf, im2.pdf, im3.pdf, im4.pdf, im5.pdf, im6.pdf, im7.pdf, im8.pdf,    im9.pdf, flipbook-doc.pdf, flipbook-ex.pdf.';
$VAR986 = '986. flippdf: Horizontal flipping of pages with pdfLaTeX flippdf.pdf.';

La difficulté vient du format qui ne différencie pas les espaces dans la phrase description de l’espace qui inaugure la liste des fichiers pdf. Je ne vois pas bien comment utiliser cut dans ce contexte.

Il est possible que l’utilisation de la fonction split de perl soit aussi une piste (à explorer).

L’enjeu est essentiellement pour moi de me remettre à Perl, après des années de quasi inutilisation, mais une solution autre m’intéresse autant.

Merci

PS
Voici le résultat correspondant de mon code:

nom: flashmovie
comment: Directly embed flash movies into PDF files test-beamer-0.pdf,   
$VAR1 = ' test-flv.pdf';
nom: flipbook
comment: Typeset flipbook animations, in the corners of documents    im01.pdf, im02.pdf, im03.pdf, im04.pdf, im05.pdf, im06.pdf, im0.pdf,    im1.pdf, im10.pdf, im11.pdf, im12.pdf, im13.pdf, im14.pdf, im15.pdf,    im16.pdf, im2.pdf, im3.pdf, im4.pdf, im5.pdf, im6.pdf, im7.pdf, im8.pdf,    im9.pdf, flipbook-doc.pdf,
$VAR1 = ' flipbook-ex.pdf';
nom: flippdf
comment: Horizontal flipping of pages with pdfLaTeX
$VAR1 = ' flippdf.pdf';

où on voit qu’il n’y a qu’une seule variable au tableau des pdf ($3) (le dernier de la ligne), et que les autres sont restés dans la chaine de description ($2)

Une autre idée simple à explorer:

récupérer d’abord la liste des pdf (en les supprimant) dans une première regexp!

(je vous tiendrais au courant, sans doute pas avant samedi ou dimanche)

Tu peux utiliser des quantificateurs non gourmands : http://lhullier.developpez.com/tutoriels/perl/intro/#LVIII-Q

Oui, merci kna

depuis je me suis replongé dans «Maitrise des expressions régulières», pour rafraichir ma mémoire; malheureusement je ne dispose pas de tout le temps (ni des ressources de ma jeunesse), et mon script est aux oubliettes.

L’exercice reste utile et j’y reviendrai sans doute.