sens des regexpr
Le
kurtz_le_pirate
bonjour,
je suis en train de faire quelques regexpr sur des numéros de téléphone.
par exemple, trouver les numéros entre **66 et **75 qui donne :
6[6-9]|7[0-5]
même chose pour des numéros entre *196 et *200 ce qui donne : 19[6-9]|200
et la ça ne fonctionne pas. je ne comprends pas pourquoi car en plus,
si je fais 200|19[6-9] c'est ok !
elle est ou l'explication la ?
merci
bug: problème d'interface entre la chaise et le clavier"
je suis en train de faire quelques regexpr sur des numéros de téléphone.
par exemple, trouver les numéros entre **66 et **75 qui donne :
6[6-9]|7[0-5]
même chose pour des numéros entre *196 et *200 ce qui donne : 19[6-9]|200
et la ça ne fonctionne pas. je ne comprends pas pourquoi car en plus,
si je fais 200|19[6-9] c'est ok !
elle est ou l'explication la ?
merci
bug: problème d'interface entre la chaise et le clavier"

Poser une question


Le 27/06/2011 15:12, kurtz_le_pirate a écrit :
C'est en effet incompréhensible. Mais déjà, ce serait bien que tu
explicites un peu le « ça ne fonctionne pas ». Tu as des chaînes
qui contiennent un nombre entre 196 et 200 et qui ne sont pas
reconnues ? Ou bien des chaînes qui sont reconnues alors qu'elles
ne devraient pas l'être ? Donne un code précis, des exemples
précis, et les résultats obtenus !
J'ai essayé sur http://www.perlfect.com/articles/regextutor.shtml et
tout semble fonctionner comme il faut.
Je parie pour un bug dans ton programme perl qui n'aurait rien à voir
avec les regexps en elles-mêmes. Si jamais ce n'était pas le cas et
qu'il s'agisse d'un vrai bug des regexps, je te signale l'existence
du groupe fr.comp.lang.regexp -- mais pour le moment j'en doute.
Cordialement,
--
Olivier Miakinen
Toujours pas, une semaine après ?
désolé pour le retard...
j'avais utiliser le "RegexDesigner" de RadSoftware
et c'est lui qui a un problème.
en fait, le perl fonctionne.
my $number = $ARGV[0];
if(!$number) {
print "nPlease give me a number.nnn";
exit(1);
}
if ($number =~ /19[6-9]|200/) {
print "OK";
}
else
{
print "out of rangen";
}
désolé du dérangement
Parfait !
--
Olivier Miakinen
Tiens, un chouette outil d'aide aux regex en perl, lui ( avec Tk):
#!/usr/bin/perl
use strict;
use warnings;
use Tk;
my $mw = MainWindow->new;
my $menubar = $mw->Menu(-type => 'menubar');
$mw->configure(-menu => $menubar);
{
my $f = $menubar->cascade(-label => '~File', -tearoff => 0);
$f->command(-label => "Open...", -command => &open_cmd);
$f->separator();
$f->command(-label => "~Quit", -command => sub {$mw->destroy()});
}
$mw->Entry(qw/-validate key -width 50 -bg white -fg black/,
-validatecommand => &try_match,
-textvariable => my $reg)
->pack(qw/-fill x/);
$mw->Label(-textvariable => my $err, qw/-fg red -justify left/)
->pack(qw/-fill x/);
my $text $mw->Scrolled('Text', qw/-scrollbars se -bg white -fg black -wrap none/)
->pack(qw/-fill both -expand 1/);
$text->tagConfigure('0', qw/-background green/);
$text->tagConfigure('1', qw/-background cyan/);
MainLoop;
sub try_match {
my ($regexp, $tag, $null, $match) = (shift, 0, 0, 0);
$text->tagRemove(0, '0.0', 'end');
$text->tagRemove(1, '0.0', 'end');
$err = "";
return 1 if $regexp eq "";
eval {
"" =~ m/$regexp/;
my $start = "0.0";
while (defined (my $first $text->search(qw/-regexp -forwards/,
-count => (my $count),
$regexp, $start, 'end'))) {
$match ++;
if ($count == 0) {
$null++;
$start = $text->index("$first +1 chars");
last if $text->compare($start, ">=", 'end');
} else {
$start = $text->index("$first +$count chars");
$text->tagAdd($tag = 1 - $tag, $first, $start);
}
}
};
if ($@) {
($err = $@) =~ s/;.*//s;
} elsif ($null) {
$err = "$match occurrence(s) ($null null string(s))";
} else {
$err = "$match occurrence(s)";
}
return 1;
}
sub open_cmd {
my $file = $mw->getOpenFile(-filetypes => [['Text' => '.txt'],
['All' => '.*']]);
return if not defined $file or not -r $file;
local $/ = undef;
open my $fh, "<", $file
or $err = "Can't read file '$file': $!", return;
my $content = <$fh>;
close $fh;
$text->delete('0.0', 'end');
$text->insert('0.0', $content);
try_match($reg);
}
--
Quis, quid, ubi, quibus auxiliis, cur, quomodo, quando