[PERL: Expr. régulières]: Négation d'un mot
Fermé
F_Pignon
Messages postés
23
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
29 mai 2008
-
27 avril 2008 à 18:39
F_Pignon Messages postés 23 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 29 mai 2008 - 28 avril 2008 à 00:02
F_Pignon Messages postés 23 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 29 mai 2008 - 28 avril 2008 à 00:02
A voir également:
- [PERL: Expr. régulières]: Négation d'un mot
- Ce programme est écrit en python. il construit un mot secret dans une variable mais il ne l'affiche pas. modifiez-le pour qu'il affiche le mot secret. exécutez-le. quel est ce mot secret ? ✓ - Forum Python
- Dans le texte, un seul mot a réellement été écrit en lettres capitales (majuscules). quel est ce mot ? ✓ - Forum Word
- Mot de passe administrateur freebox ✓ - Forum Freebox
- Piratage facebook changer mot de passe - Guide
- Mettre un mot de passe sur un dossier - Guide
4 réponses
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
27 avril 2008 à 20:40
27 avril 2008 à 20:40
Salut,
voici 2 exemples
voici 2 exemples
lami20j@debian:~$ cat f_pignon fichierdivers fichiertexte fichiernimportequoi fichiertexte fichierperl lami20j@debian:~$ perl -ne 'print unless /^\w+(?=texte)/' f_pignon fichierdivers fichiernimportequoi fichierperl lami20j@debian:~$ perl -ne 'print if /^fichier(?!texte)/' f_pignon fichierdivers fichiernimportequoi fichierperl lami20j@debian:~$
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
27 avril 2008 à 20:51
27 avril 2008 à 20:51
Et dans un script
lami20j@debian:~$ cat f_pignon.pl #!/usr/bin/perl use strict;use warnings; while(<DATA>){ print if /fichier(?!texte)/; } __END__ fichierdivers fichiertexte fichiernimportequoi fichiertexte fichierperl lami20j@debian:~$ perl f_pignon.pl fichierdivers fichiernimportequoi fichierperl lami20j@debian:~$2ème variante
lami20j@debian:~$ cat f_pignon.pl #!/usr/bin/perl use strict;use warnings; while(<DATA>){ print unless /fichier(?=texte)/; } __END__ fichierdivers fichiertexte fichiernimportequoi fichiertexte fichierperl lami20j@debian:~$ perl f_pignon.pl fichierdivers fichiernimportequoi fichierperl
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
27 avril 2008 à 21:09
27 avril 2008 à 21:09
Et voici pour ton exemple (à toi d'adapter)
lami20j@debian:~$ cat f_pignon.pl #!/usr/bin/perl use strict;use warnings; open F,"monExemple.txt" or die "PB : $!"; while (<F>){ next unless /fichier\s+(?!texte)/; s#^(.*)(fichier.*)#$1<balise>$2</balise>#; print; } close (F); __END__ lami20j@debian:~$ cat monExemple.txt ceci est un fichier test, ceci est un fichier texte, ceci est un fichier avec des caractères. Ceci est un fichier simple. lami20j@debian:~$ perl f_pignon.pl ceci est un <balise>fichier test, </balise> ceci est un <balise>fichier avec des caractères.</balise> Ceci est un <balise>fichier simple.</balise>
F_Pignon
Messages postés
23
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
29 mai 2008
1
27 avril 2008 à 22:24
27 avril 2008 à 22:24
Bonsoir lami20j,
Merci beaucoup pour ta réponse qui une fois de plus va bien m'aider (car ça marche très bien comme ça)
Par contre plus précisément, mon problème porte vraiment sur l'opérateur de négation sur un mot entier car je ne sais potentiellement pas le mot qui va être concerné par la ligne à ignorer.
Mon script est en fait un peu plus long que ça.
Je prends des patrons dans un fichier (c'est un fichier de règles syntaxiques) et je vérifie à l'aide de mon script si chacun de ces patrons matche dans mon fichier texte (qui contient des mots étiquetés).
Exemple simple:
Dans mon fichier de règles :
Dans mon fichier texte
et je dois obtenir ça (d'après la règle 1 par exemple):
Mes règles sont donc sous forme d'expressions régulières et je veux pouvoir utiliser des règles du type :
que je voudrais écrire comme ça:
D'où la nécessité de pouvoir faire porter la négation sur un mot entier, mais peut être est ce trop "tordu"...
Si tu vois comment je pourrais procéder ?
Merci encore
Merci beaucoup pour ta réponse qui une fois de plus va bien m'aider (car ça marche très bien comme ça)
Par contre plus précisément, mon problème porte vraiment sur l'opérateur de négation sur un mot entier car je ne sais potentiellement pas le mot qui va être concerné par la ligne à ignorer.
Mon script est en fait un peu plus long que ça.
Je prends des patrons dans un fichier (c'est un fichier de règles syntaxiques) et je vérifie à l'aide de mon script si chacun de ces patrons matche dans mon fichier texte (qui contient des mots étiquetés).
Exemple simple:
Dans mon fichier de règles :
règle1 : mot_TagA mot_TagB règle2 : mot_TagA mot_TagB mot_TagC règle3 : mot_TagA mot_TagD etc.
Dans mon fichier texte
mot1_TagA mot2_TagE mot3_TagB mot4_TagA mot5_TagB mot6_TagF, ...
et je dois obtenir ça (d'après la règle 1 par exemple):
mot1_TagA mot2_TagE mot3_TagB <balise>mot4_TagA mot5_TagB</balise> mot6_TagF, ...
Mes règles sont donc sous forme d'expressions régulières et je veux pouvoir utiliser des règles du type :
mot_Tag-quelconque mot_TagB mot_TagC "suivi de n'importe quoi sauf 'mot_TagE' "
que je voudrais écrire comme ça:
mot_[^ ]+ (mot_TagB )+(mot_TagC )+[^mot_TagE]+
D'où la nécessité de pouvoir faire porter la négation sur un mot entier, mais peut être est ce trop "tordu"...
Si tu vois comment je pourrais procéder ?
Merci encore
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
27 avril 2008 à 22:37
27 avril 2008 à 22:37
/fichier(?!texte)/;Ben, justement, l'utilisation de test avant négatif permet de faire ça
Le teste avant négatif permet de ne pas réussir sur la droite
F_Pignon
Messages postés
23
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
29 mai 2008
1
28 avril 2008 à 00:02
28 avril 2008 à 00:02
ok merci beaucoup, dsl j'allais justement te demander ce que faisais cette ligne..
J'ai ma réponse :)
Merci encore
J'ai ma réponse :)
Merci encore