[Perl] regex
Résolu/Fermé
A voir également:
- [Perl] regex
- Denon perl pro test - Accueil - Audio
- Regex buddy - Télécharger - Édition & Programmation
- Regex adresse postale - Forum PHP
- Active perl - Télécharger - Édition & Programmation
- Regex tout sauf - Forum Java
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 569
14 févr. 2008 à 19:08
14 févr. 2008 à 19:08
Salut,
si tu diras ce que tu veux obtenir comme résultat final je pourrai peut être t'aider
Donne un exemple concret avec 2 phrases.
Merci
si tu diras ce que tu veux obtenir comme résultat final je pourrai peut être t'aider
Donne un exemple concret avec 2 phrases.
Merci
J'ai un texte T1 contenant n phrases. Chaques phrases contient un nombre de mots.
Je fais une découpe par phrase et pour chaque phrase je veux faire une recherche sur un autre texte T2 (détection de plagiat).
Par exemple j'ai la phrase : "Bonjour le monde"
que je mets dans le tableau @tab
La commande
m/$tab[0]\s$tab[1]\s$tab[2]/ me renvoie vraie ou faux si la phrase est dans T2.
Maintenant mon problème, c'est que souhaiterais automatiser le tout avec par exemple une boucle.
Je voudrais que cette dernière crée l'expression régulière de recherche.
Exemple :
J'ai
Phrase 1 : "Bonjour le monde"
Phrase 2 : "Hello world"
Phrase 3 : "Il fait beau aujourd'hui"
J'aurais donc respectivement comme expressions régulières de recherche associées
m/$tab[0]\s$tab[1]\s$tab[2]/
m/$tab[0]\s$tab[1]]/
m/$tab[0]\s$tab[1]\s$tab[2]\s$tab[3]/
On voit que les expressions varie en fonction de la taille du tableau.
J'avais pensé à une boucle du genre
... Boucle sur les phrases du texte
... On mets dans un tableau les mots de la phrase
... Boucle qui parcoure les phrases du texte T2 pour faire les comparaisons
On a donc $line qui contient une phrase de T2
my $res = "m/; En gros là c'est ce que je recherche au final
my $size = @tab;
for(my $i; $i < $size; $i++)
{
### Là c'est le prob en gros je veux un truc comme ça (j'écris pas trop en perl car je sais pas vraiment comment l'exprimer)
$res += '\s'.$size;
}
Générer une chaine de caractère qui a pour valeur ce que je veux n'est pas le prob. Là où ça se complique, c'est que je voudrais pouvoir lancer cette chaine de caractère en tant que ligne de commande perl (Expression régulière)
Par exemple là j'ai dans $res
"m/$tab[0]\s$tab[1]\s$tab[2]/"
Si je tape
$res ça ne lancera pas la commande d'expression régulière.
Je crois que je suis encore moins clair xD
Je fais une découpe par phrase et pour chaque phrase je veux faire une recherche sur un autre texte T2 (détection de plagiat).
Par exemple j'ai la phrase : "Bonjour le monde"
que je mets dans le tableau @tab
La commande
m/$tab[0]\s$tab[1]\s$tab[2]/ me renvoie vraie ou faux si la phrase est dans T2.
Maintenant mon problème, c'est que souhaiterais automatiser le tout avec par exemple une boucle.
Je voudrais que cette dernière crée l'expression régulière de recherche.
Exemple :
J'ai
Phrase 1 : "Bonjour le monde"
Phrase 2 : "Hello world"
Phrase 3 : "Il fait beau aujourd'hui"
J'aurais donc respectivement comme expressions régulières de recherche associées
m/$tab[0]\s$tab[1]\s$tab[2]/
m/$tab[0]\s$tab[1]]/
m/$tab[0]\s$tab[1]\s$tab[2]\s$tab[3]/
On voit que les expressions varie en fonction de la taille du tableau.
J'avais pensé à une boucle du genre
... Boucle sur les phrases du texte
... On mets dans un tableau les mots de la phrase
... Boucle qui parcoure les phrases du texte T2 pour faire les comparaisons
On a donc $line qui contient une phrase de T2
my $res = "m/; En gros là c'est ce que je recherche au final
my $size = @tab;
for(my $i; $i < $size; $i++)
{
### Là c'est le prob en gros je veux un truc comme ça (j'écris pas trop en perl car je sais pas vraiment comment l'exprimer)
$res += '\s'.$size;
}
Générer une chaine de caractère qui a pour valeur ce que je veux n'est pas le prob. Là où ça se complique, c'est que je voudrais pouvoir lancer cette chaine de caractère en tant que ligne de commande perl (Expression régulière)
Par exemple là j'ai dans $res
"m/$tab[0]\s$tab[1]\s$tab[2]/"
Si je tape
$res ça ne lancera pas la commande d'expression régulière.
Je crois que je suis encore moins clair xD
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 569
14 févr. 2008 à 20:48
14 févr. 2008 à 20:48
Salut,
voici un p'tit exemple pour voir comment tu peux construire un objet regex (est-il vraiment nécessaire?!)
voici un p'tit exemple pour voir comment tu peux construire un objet regex (est-il vraiment nécessaire?!)
lami20j@debserv:~/trash$ cat kyo.pl #!/usr/bin/perl use strict;use warnings; my @phrase = split /\./,<DATA>; my @plagiat = qx/cat text2/; pop @phrase; foreach my$e(@phrase){ my @reg = split /\s+/,$e; my $regex_ = join " ", @reg; my $regex = qr{$regex_}; print "*** $regex_ *** est un plagiat dans le fichier text2\n" if (grep { m/$regex/ } @plagiat); } __END__ Bonjour le monde.Hello world.Il fait beau aujourd'hui. lami20j@debserv:~/trash$ cat text2 Il fait beau aujourd'hui. Un autre text. lami20j@debserv:~/trash$ perl kyo.pl *** Il fait beau aujourd'hui *** est un plagiat dans le fichier text2