je cherche a faire une regex qui correspond
- soit a des noms de fichiers ne contenant aucun espace : /tmp/toto
- soit a une chaine contenant eventuellement des espaces, mais entouree de
quotes : "un nom avec des espaces"
le code suivant marche :
#################################
sub test_file($) {
my $ligne = shift(@_);
mais maintenant, j'aurais voulu tout regrouper dans un seul test , avec un |
############################################
sub test_file($) {
if ($ligne =~ m/\"(.*)\"|(\S+)/) {
print "test 2 \!$ligne\! trouvé motif : $1\n";
}
}
#########################################
mais ca ne marche pas :
test 2 !"un fichier"! trouvé motif : un fichier
Use of uninitialized value in concatenation (.) or string at ./essai.pl line 20.
test 2 !/un/autre! trouvé motif :
je cherche a faire une regex qui correspond - soit a des noms de fichiers ne contenant aucun espace : /tmp/toto - soit a une chaine contenant eventuellement des espaces, mais entouree de quotes : "un nom avec des espaces"
le code suivant marche : ################################# sub test_file($) { my $ligne = shift(@_);
mais maintenant, j'aurais voulu tout regrouper dans un seul test , avec un | ############################################ sub test_file($) { if ($ligne =~ m/"(.*)"|(S+)/) { print "test 2 !$ligne! trouvé motif : $1n"; } } ######################################### mais ca ne marche pas :
test 2 !"un fichier"! trouvé motif : un fichier Use of uninitialized value in concatenation (.) or string at ./essai.pl line 20. test 2 !/un/autre! trouvé motif :
Parenthèses?
Le 22/10/2004 10:36, :
bonjour
je cherche a faire une regex qui correspond
- soit a des noms de fichiers ne contenant aucun espace : /tmp/toto
- soit a une chaine contenant eventuellement des espaces, mais entouree de
quotes : "un nom avec des espaces"
le code suivant marche :
#################################
sub test_file($) {
my $ligne = shift(@_);
mais maintenant, j'aurais voulu tout regrouper dans un seul test , avec un |
############################################
sub test_file($) {
if ($ligne =~ m/"(.*)"|(S+)/) {
print "test 2 !$ligne! trouvé motif : $1n";
}
}
#########################################
mais ca ne marche pas :
test 2 !"un fichier"! trouvé motif : un fichier
Use of uninitialized value in concatenation (.) or string at ./essai.pl line 20.
test 2 !/un/autre! trouvé motif :
je cherche a faire une regex qui correspond - soit a des noms de fichiers ne contenant aucun espace : /tmp/toto - soit a une chaine contenant eventuellement des espaces, mais entouree de quotes : "un nom avec des espaces"
le code suivant marche : ################################# sub test_file($) { my $ligne = shift(@_);
mais maintenant, j'aurais voulu tout regrouper dans un seul test , avec un | ############################################ sub test_file($) { if ($ligne =~ m/"(.*)"|(S+)/) { print "test 2 !$ligne! trouvé motif : $1n"; } } ######################################### mais ca ne marche pas :
test 2 !"un fichier"! trouvé motif : un fichier Use of uninitialized value in concatenation (.) or string at ./essai.pl line 20. test 2 !/un/autre! trouvé motif :
/ab|c/ désigne un a, suivi d'un b ou d'un c. Ce que tu veux faire est /(ab)|c/, comme indiqué par Jack.
Jack
Le 24/10/2004 17:40, :
/ab|c/ désigne un a, suivi d'un b ou d'un c. Ce que tu veux faire est /(ab)|c/, comme indiqué par Jack.
Bonjour, Il ya de ça et il est souvent utile: de ne pas négliger le else: print "echec ....", imprimer les mémoires utilisées, utiliser sans vergogne la variable $+, ...
Bon courage.
Le 24/10/2004 17:40, :
/ab|c/ désigne un a, suivi d'un b ou d'un c. Ce que tu veux faire est
/(ab)|c/, comme indiqué par Jack.
Bonjour,
Il ya de ça et il est souvent utile:
de ne pas négliger le else: print "echec ....",
imprimer les mémoires utilisées,
utiliser sans vergogne la variable $+,
...
/ab|c/ désigne un a, suivi d'un b ou d'un c. Ce que tu veux faire est /(ab)|c/, comme indiqué par Jack.
Bonjour, Il ya de ça et il est souvent utile: de ne pas négliger le else: print "echec ....", imprimer les mémoires utilisées, utiliser sans vergogne la variable $+, ...
Bon courage.
Paul Gaborit
À (at) Sun, 24 Oct 2004 17:40:00 +0200, Antoun écrivait (wrote):
/ab|c/ désigne un a, suivi d'un b ou d'un c. Ce que tu veux faire est /(ab)|c/, comme indiqué par Jack.
Heu... m/ab|c/ cherche à reconnaître 'ab' ou 'c' mais en aucun cas 'ac' !
perl -e 'print "$&n" if "ac" =~ m/ab|c/;' c
perl -e 'print "$&n" if "ac" =~ m/a(b|c)/;' ac
-- Paul Gaborit - <http://www.enstimac.fr/~gaborit/> Perl en français - <http://www.enstimac.fr/Perl/>
À (at) Sun, 24 Oct 2004 17:40:00 +0200,
Antoun <antoun@free.fr> écrivait (wrote):
/ab|c/ désigne un a, suivi d'un b ou d'un c. Ce que tu veux faire est
/(ab)|c/, comme indiqué par Jack.
Heu... m/ab|c/ cherche à reconnaître 'ab' ou 'c' mais en aucun cas 'ac' !
perl -e 'print "$&n" if "ac" =~ m/ab|c/;'
c
perl -e 'print "$&n" if "ac" =~ m/a(b|c)/;'
ac
--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>
À (at) Sun, 24 Oct 2004 17:40:00 +0200, Antoun écrivait (wrote):
/ab|c/ désigne un a, suivi d'un b ou d'un c. Ce que tu veux faire est /(ab)|c/, comme indiqué par Jack.
Heu... m/ab|c/ cherche à reconnaître 'ab' ou 'c' mais en aucun cas 'ac' !
perl -e 'print "$&n" if "ac" =~ m/ab|c/;' c
perl -e 'print "$&n" if "ac" =~ m/a(b|c)/;' ac
Pour être factuel, Il me semblé que l'écriture proposée par Eric ne traitait pas cela (comme il le souhaite). ex: titi" et grosminet" ""
Autre exemple: "titi"estparti
Paul Gaborit
À (at) Mon, 25 Oct 2004 17:31:15 +0200, Jack écrivait (wrote):
Pour être factuel, Il me semblé que l'écriture proposée par Eric ne traitait pas cela (comme il le souhaite). ex: titi" et grosminet" ""
Autre exemple: "titi"estparti
Ces deux exemples ne me semblent pas valides (si j'ai bien compris la demande initiale). Donc je ferais un truc du genre :
sub test_file { # pas de prototype (ce ne sert pas vraiment) my ($ligne) = @_; # on veut reconnaitre toute la ligne # (d'où les ^ et les $ de debut et de fin) if ($ligne =~ m/^"(.+)"$|^([^" ]+)$/) { if (defined $1) { print "fichier avec guillemets: $1n"; return $1; } else { print "fichier sans guillemets: $2n"; return $2; } } else { die "Nom de fichier invalide: $ligne"; } }
Mais peut-être n'ai-je rien compris à la demande initiale ! :-(
-- Paul Gaborit - <http://www.enstimac.fr/~gaborit/> Perl en français - <http://www.enstimac.fr/Perl/>
À (at) Mon, 25 Oct 2004 17:31:15 +0200,
Jack <jack.sardin@rd.francetelecom.com> écrivait (wrote):
Pour être factuel, Il me semblé que l'écriture proposée par Eric ne traitait
pas cela (comme il le souhaite).
ex:
titi" et grosminet" ""
Autre exemple:
"titi"estparti
Ces deux exemples ne me semblent pas valides (si j'ai bien compris la demande
initiale). Donc je ferais un truc du genre :
sub test_file { # pas de prototype (ce ne sert pas vraiment)
my ($ligne) = @_;
# on veut reconnaitre toute la ligne
# (d'où les ^ et les $ de debut et de fin)
if ($ligne =~ m/^"(.+)"$|^([^" ]+)$/) {
if (defined $1) {
print "fichier avec guillemets: $1n";
return $1;
} else {
print "fichier sans guillemets: $2n";
return $2;
}
} else {
die "Nom de fichier invalide: $ligne";
}
}
Mais peut-être n'ai-je rien compris à la demande initiale ! :-(
--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>
À (at) Mon, 25 Oct 2004 17:31:15 +0200, Jack écrivait (wrote):
Pour être factuel, Il me semblé que l'écriture proposée par Eric ne traitait pas cela (comme il le souhaite). ex: titi" et grosminet" ""
Autre exemple: "titi"estparti
Ces deux exemples ne me semblent pas valides (si j'ai bien compris la demande initiale). Donc je ferais un truc du genre :
sub test_file { # pas de prototype (ce ne sert pas vraiment) my ($ligne) = @_; # on veut reconnaitre toute la ligne # (d'où les ^ et les $ de debut et de fin) if ($ligne =~ m/^"(.+)"$|^([^" ]+)$/) { if (defined $1) { print "fichier avec guillemets: $1n"; return $1; } else { print "fichier sans guillemets: $2n"; return $2; } } else { die "Nom de fichier invalide: $ligne"; } }
Mais peut-être n'ai-je rien compris à la demande initiale ! :-(
-- Paul Gaborit - <http://www.enstimac.fr/~gaborit/> Perl en français - <http://www.enstimac.fr/Perl/>
Jack
Le 25/10/2004 19:01, :
À (at) Mon, 25 Oct 2004 17:31:15 +0200, Jack écrivait (wrote):
Pour être factuel, Il me semblé que l'écriture proposée par Eric ne traitait pas cela (comme il le souhaite). ex: titi" et grosminet" ""
Autre exemple: "titi"estparti
Ces deux exemples ne me semblent pas valides (si j'ai bien compris la demande initiale). Donc je ferais un truc du genre :
sub test_file { # pas de prototype (ce ne sert pas vraiment) my ($ligne) = @_; # on veut reconnaitre toute la ligne # (d'où les ^ et les $ de debut et de fin) if ($ligne =~ m/^"(.+)"$|^([^" ]+)$/) { if (defined $1) { print "fichier avec guillemets: $1n"; return $1; } else { print "fichier sans guillemets: $2n"; return $2; } } else { die "Nom de fichier invalide: $ligne"; } }
Mais peut-être n'ai-je rien compris à la demande initiale ! :-(
Pas de nouvelle, bonne nouvelle, donc vous avez dû faire la bonne proposition. Mais, comme vous n'avez voulu ni titi ni grosminet :-), je dirai que: la variable de die ne me semble pas valorisable, et le $+ aurait pu être considéré.
Le 25/10/2004 19:01, :
À (at) Mon, 25 Oct 2004 17:31:15 +0200,
Jack <jack.sardin@rd.francetelecom.com> écrivait (wrote):
Pour être factuel, Il me semblé que l'écriture proposée par Eric ne traitait
pas cela (comme il le souhaite).
ex:
titi" et grosminet" ""
Autre exemple:
"titi"estparti
Ces deux exemples ne me semblent pas valides (si j'ai bien compris la demande
initiale). Donc je ferais un truc du genre :
sub test_file { # pas de prototype (ce ne sert pas vraiment)
my ($ligne) = @_;
# on veut reconnaitre toute la ligne
# (d'où les ^ et les $ de debut et de fin)
if ($ligne =~ m/^"(.+)"$|^([^" ]+)$/) {
if (defined $1) {
print "fichier avec guillemets: $1n";
return $1;
} else {
print "fichier sans guillemets: $2n";
return $2;
}
} else {
die "Nom de fichier invalide: $ligne";
}
}
Mais peut-être n'ai-je rien compris à la demande initiale ! :-(
Pas de nouvelle, bonne nouvelle, donc vous avez dû faire la bonne
proposition. Mais, comme vous n'avez voulu ni titi ni grosminet :-),
je dirai que:
la variable de die ne me semble pas valorisable,
et le $+ aurait pu être considéré.
À (at) Mon, 25 Oct 2004 17:31:15 +0200, Jack écrivait (wrote):
Pour être factuel, Il me semblé que l'écriture proposée par Eric ne traitait pas cela (comme il le souhaite). ex: titi" et grosminet" ""
Autre exemple: "titi"estparti
Ces deux exemples ne me semblent pas valides (si j'ai bien compris la demande initiale). Donc je ferais un truc du genre :
sub test_file { # pas de prototype (ce ne sert pas vraiment) my ($ligne) = @_; # on veut reconnaitre toute la ligne # (d'où les ^ et les $ de debut et de fin) if ($ligne =~ m/^"(.+)"$|^([^" ]+)$/) { if (defined $1) { print "fichier avec guillemets: $1n"; return $1; } else { print "fichier sans guillemets: $2n"; return $2; } } else { die "Nom de fichier invalide: $ligne"; } }
Mais peut-être n'ai-je rien compris à la demande initiale ! :-(
Pas de nouvelle, bonne nouvelle, donc vous avez dû faire la bonne proposition. Mais, comme vous n'avez voulu ni titi ni grosminet :-), je dirai que: la variable de die ne me semble pas valorisable, et le $+ aurait pu être considéré.