Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

sens des regexpr

5 réponses
Avatar
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"

5 réponses

Avatar
Olivier Miakinen
Bonjour,

Le 27/06/2011 15:12, kurtz_le_pirate a écrit :

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 !



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.

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
Avatar
Olivier Miakinen
Le 27/06/2011 16:45, je répondais à kurtz_le_pirate :

[...] ce serait bien que tu
explicites un peu le « ça ne fonctionne pas ». [...]



Toujours pas, une semaine après ?
Avatar
kurtz_le_pirate
"Olivier Miakinen" <om+ a écrit dans le message de
news:4e10283a$
Le 27/06/2011 16:45, je répondais à kurtz_le_pirate :

[...] 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.nnn";
exit(1);
}

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

désolé du dérangement
Avatar
Olivier Miakinen
Le 05/07/2011 16:19, kurtz_le_pirate a écrit :

en fait, le perl fonctionne.



Parfait !

--
Olivier Miakinen
Avatar
Emmanuel Florac
Le Tue, 05 Jul 2011 16:19:34 +0200, kurtz_le_pirate a écrit:


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