Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 11/05/2007, à 15:30

Linschn

[Perl] Expression rationnelle de "matchant" pas

Bonjour à tous.
Je travaille sur un projet personnel en perl, et j'effectue une boucle sur les lignes d'un fichier LaTeX.
Dans cette boucle se trouvent les lignes :

print("titleTAG : |${titleTag}| : $t1\n");
if($t1=~m/"$titleTag"/i)
{
    print("OOOOOOOOOOOUUUUUUUUUUUUUUUUUUUIIIIIIIIIIIIi\n");
}

Et voici un extrait de ce que ressort mon programme :

titleTAG : |\title{| : \begin{document}
titleTAG : |\title{| : \title{}
titleTAG : |\title{| : \author{KLEIN Edouard}

Vous pouvez constater que $t1 prend la valeur "\title{}", que $titleTag est en permanence à "\title{"et que pourtant ($t1=~m/"$titleTag"/i) reste faux.

Je ne comprend pas. Si quelqu'un a une idée, je suis preneur.

Merci d'avance

Hors ligne

#2 Le 11/05/2007, à 16:14

Linschn

Re : [Perl] Expression rationnelle de "matchant" pas

Je vais suivre Tim Towtdi, et essayer avec ce module :
http://search.cpan.org/~schubiger/LaTeX-TOM-0.6/lib/LaTeX/TOM.pm
Mais ça m'ennuie de sortir la grosse artillerie pour une petite manipulation...

Hors ligne

#3 Le 11/05/2007, à 22:18

JoelS

Re : [Perl] Expression rationnelle de "matchant" pas

Linschn a écrit :
print("titleTAG : |${titleTag}| : $t1\n");
if($t1=~m/"$titleTag"/i)
{
    print("OOOOOOOOOOOUUUUUUUUUUUUUUUUUUUIIIIIIIIIIIIi\n");
}

A mon humble avis, tu devrais ne pas écrire

m/"$titleTag"/i

mais bien

m/$titleTag/i

L'opérateur d'expression régulière n'a pas besoin de stringifier une variable pour l'interpréter.

Hors ligne

#4 Le 12/05/2007, à 14:27

Linschn

Re : [Perl] Expression rationnelle de "matchant" pas

Alors quand je fais ça :

#!/usr/bin/perl -w
use strict;

my $t1 = "\\title\{\}";
my $titleTag = "title\{";
print("|${titleTag}| |${t1}|\n");
if($t1 =~ m /$titleTag/)
{
    print("OOOOOOOOOOOUUUUUUUUUUUUUUUUUUUIIIIIIIIIIIIi\n");
}

Ca fonctionne. (C'est à dire, j'obtiens mon OOOUUII dans la sortie standard).

En revanche si je remplace la 5ème ligne par

my $titleTag = '\title{';

J'obtiens

|\title{| |\title{}|

Je pense que le probmème vient du fait que l'opérateur d'expression rationnelles interprète \title{ comme étant [Tabulation]itle{.
J'ignore comment lui expliquer qu'il ne faut pas interpréter la variable $titleTag.

Hors ligne