Effectivement mes regexp devaient être fautives, parce que $1 et compagnie fonctionnent avec la regexp de disedorgue.
Par exemple,ne fonctionne pas et me laisse $ref_article à la valeur undef.
Code : Sélectionner tout - Visualiser dans une fenêtre à part $ref_article = $1 if (/REF_ARTICLE}[\s]*=[\s]*"([\w]{10})"/); # apparemment, ne renvoie rien dans ref_article
$ref_article est censé être une suite de 10 caractères, obligatoirement renseignée.
La raison pour laquelle il n'y a pas deest parce que je suis dans une boucle du type
Code : Sélectionner tout - Visualiser dans une fenêtre à part ... $string =~
(je sais, c'est une syntaxe louche, patapé ).
Code : Sélectionner tout - Visualiser dans une fenêtre à part while (<MONFICHIER>)
- La programmation fonctionnelle en Perl : 1. Les opérateurs de liste; 2. Les fonctions d'ordre supérieur; 3. Étendre le langage.
- Comment utiliser des décorateurs en Perl: Un tutoriel pour changer le comportement d'une fonction sans en modifier le code source
- De Perl 5 à Perl 6 : 1. Les bases; 2. Les nouveautés; 3. Approfondissements; 4. Annexe 1: Ce qui change entre Perl 5 et Perl 6; Annexe 2: Les nouveautés de Perl 6.
- Les regex et grammaires de Perl 6
- Objets, classes et rôles en Perl 6 - Tutoriel de programmation orientée objet
- Tour d'horizon du nouveau langage Perl 6
Normalement, je ne suis pas censé le faire...
Voilà en gros ce qui se situe quelque part dans la ligne :Je souhaite extraire 0123456789 dans la variable $ref_article.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ... REF_ARTICLE="0123456789" ...
Ici, tu veux récupérer ce qui est en rouge:
Donc dans un premier temps, faisons la capture sur cette chaine précise (ici, je le fais en uniligne) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part ... REF_ARTICLE="0123456789" ...
On est ok, ça fonctionne, maintenant, essayons de la rendre générique, donc retirons déjà ce qui est inutile dans la recherche:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $ echo '... REF_ARTICLE="0123456789" ...' | perl -ne '/... REF_ARTICLE="(0123456789)" .../; print $1."\n"' 0123456789
Là, ça fonctionne aussi, mais sur une chaine précise que l'on a réduit au minimum, reste plus qu'à identifier comment rendre générique la capture et ici on voit que ça commence par un guillemet et que ça fini par un guillemet (ceux-ci exclu de la capture) et de plus, on sait que l'on ne peut pas avoir de chaine vide ce que l'on peut traduire en expression régulière par (en rouge, la regex) : "([^"]+)".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $ echo '... REF_ARTICLE="0123456789" ...' | perl -ne '/REF_ARTICLE="(0123456789)"/; print $1."\n"' 0123456789
et donc, au final ça donne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 echo '... REF_ARTICLE="0123456789" ...' | perl -ne '/REF_ARTICLE="([^"]+)"/; print $1."\n"' 0123456789
Cordialement.
Problème résolu...
Il y avait juste un { que j'avais rajouté par erreur, une faute de frappe toute bête...
disedorgue, lolo78
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager