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 :

Une expression qui ne match pas ?


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Une expression qui ne match pas ?
    Voila, je voudrais savoir si quelqu'un peut me dire pourquoi l'expression suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Décès ?|Mort ?)?de (([Kk](laus|LAUS))[ ]*((([Nn](omi|OMI)))|([Ss](erber|ERBER)))) à l'âge de ([0-9][0-9][0-9]?)
    ne matche pas le texte suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bla bla bla. Mort de Klaus NOMI à l'âge de 39 ans. bla bla bla

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Je ne peux pas vu que cela matche.... Donne plus de code, tu as dû faire une erreur autre part.

    --
    Jedaï

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    voici le code complet :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    # déclaration des variables
    $snippetsFileName = $ARGV[0];
    $patternFileName = $ARGV[1];
    $resultFileName = $ARGV[2];
    $endFile = $ARGV[3];
    $pattern = "";
     
    # on récupère le patron
    open(FICPATTERN, $patternFileName);
    while(<FICPATTERN>) 
    { $pattern = $_; }
    close(FICPATTERN);
     
    {
    	# on ouvre le fichier contenant les résultats éventuels
    	# cette ouverture est systématique afin d'effacer les éventuels résultats précédents
    	open(FICOUT, "> ".$resultFileName);
     
    	# on récupère les snippets depuis leur fichier
    	open(FICSNIPPETS, $snippetsFileName);
     
    	# on enlève le balisage HTML du fichier snippets
    	system "perl html2txt.PERL $snippetsFileName";
     
    	# on parcoure le fichier snippets pour trouver les termes
    	while(<FICSNIPPETS>)
    	{
    		# on recherche toutes les occurrences du patron dans les snippets
    		# tant que on matche
    		while (/$pattern/) 
    		{
    			# on ecrit la partie matchée dans le fichier de sortie
    			# pour cela, on utilise la memoire des parentheses des expressions regulieres
    			# on parcoure donc l'ensemble des groupes matches
    			foreach $i (1..$#-)
    			{
    				# on recupere le terme courant
    				$groupeCourant = ${$i};
     
    				# l'expression reguliere represantant un terme de la relation
    				# peut avoir plusieurs groupes de parenteses
    				# et donc plusieurs groupes matches. 
    				# on parcoure donc chaque groupe matche pour ne garder que le principal
    				if(defined $groupeCourant) 
    				{
    					if( ! defined $groupePreced) 
    					{
    						# initialisation du premier groupe
    						$groupePreced = $groupeCourant;
    						print FICOUT ("$groupeCourant");
    					} # fin if
    					else
    					{
    						# si le groupe que l'on rencontre n'est pas inclu dans le precedent
    						if(index($groupePreced, $groupeCourant)==-1)
    						{
    							# alors on garde ce groupe
    							print FICOUT ("\t$groupeCourant");
    							$groupePreced = $groupeCourant;
    						} # fin if
    					} # fin else
    				} # fin if 
    			} # fin foreach
    			print FICOUT ("\n");
    			$groupePreced = undef;
     
    			# on enlève des snippets la partie matchée et ce qui précède 
    			$_ = $';
     
    		} # fin while
    	} # fin while
    } # fin if pattern != ""
     
    # on ferme le fichier des snippets
    close(FICSNIPPETS);
     
    # on ferme le fichier contenant les résultats éventuels
    close(FICOUT);
     
    # on cree un fichier qui indique à java que le processus est terminé
    open(FICEND, "> ".$endFile);
    close(FICEND);
    Ce qui est bisarre c'est que quand je recherche cette expression régulière avec EditPLus dans le texte du post précédent, il me dit que l'expression ne matche pas ...

    Sur d'autres expressions régulières, mon programme fonctionne

    Voici les paramètres à donner au programme :
    - le fichier dans lequel chercher les occurrences
    - le fichier contenant l'expression régulière
    - le fichier de sortie pour les parties matchées
    - un nom de fichier qui sera créé en fin de processus
    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -w FindTermsInSnippets.PERL "snippets.txt" "Pattern.PERL" "Terms.PERL" "FinProcessus.PERL"

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    ok j'ai trouvé : le fichier en entrée que je donnais n'était pas bon

    en mettant le bon fichier : ça marche !

    ce que je ne comprends par contre pas : c'est pourquoi EditPlus ne parvient pas à matcher ... mais bon, à la rigueur : ça n'a pas d'importance

    Merci de m'avoir répondu !

    Krusty.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 27/02/2011, 10h21
  2. [RegEx] Expression qui ne contient pas une chaine
    Par coupolites dans le forum Langage
    Réponses: 5
    Dernier message: 02/03/2010, 10h07
  3. BOOST::REGEX une expression qui passe pas.
    Par techz dans le forum Boost
    Réponses: 2
    Dernier message: 13/05/2009, 08h14
  4. Réponses: 8
    Dernier message: 01/03/2007, 08h44
  5. Une requête qui ne reconnait pas is not null
    Par LeBauw dans le forum Access
    Réponses: 2
    Dernier message: 08/09/2005, 12h29

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