Discussion:
sens des regexpr
(trop ancien pour répondre)
kurtz_le_pirate
2011-06-27 13:12:30 UTC
Permalink
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"
Olivier Miakinen
2011-06-27 14:45:15 UTC
Permalink
Bonjour,
Post by kurtz_le_pirate
je suis en train de faire quelques regexpr sur des numéros de téléphone.
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 !
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.
Post by kurtz_le_pirate
elle est ou l'explication la ?
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
Olivier Miakinen
2011-07-03 08:29:06 UTC
Permalink
[...] ce serait bien que tu
explicites un peu le « ça ne fonctionne pas ». [...]
Toujours pas, une semaine après ?
kurtz_le_pirate
2011-07-05 14:19:34 UTC
Permalink
Post by Olivier Miakinen
[...] ce serait bien que tu
explicites un peu le « ça ne fonctionne pas ». [...]
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.\n\n\n";
exit(1);
}

if ($number =~ /19[6-9]|200/) {
print "OK";
}
else
{
print "out of range\n";
}

désolé du dérangement
Olivier Miakinen
2011-07-05 18:20:30 UTC
Permalink
Post by kurtz_le_pirate
en fait, le perl fonctionne.
Parfait !
--
Olivier Miakinen
Emmanuel Florac
2011-07-05 20:17:42 UTC
Permalink
j'avais utiliser le "RegexDesigner" de RadSoftware et c'est lui qui a un
problème.
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
Loading...