Font
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]8460[/thread]

Zahlenvergleich (Reguläre Ausdrücke): if ($skalar =~ m/[13-52]/) {} ?



<< |< 1 2 >| >> 13 entries, 2 pages
guest Gast
 2006-11-01 00:48
#71272 #71272
Hallo,

Ich habe folgendes "Problem". Also: Ich habe im Idealfall eine Zahl von 13 bis 52 in einem Skalar. z.B. $skalar=23.

Nun möchte überprüfen, ob dies wirklich der Fall ist. Das heißt, alles war größer als 52 und kleiner als 13 soll unwahr sein. Ich weiß dass ich das leicht mit if ($skalar > 52 or $skalar < 13) {} möglich ist, ich möchte das jedoch mit einem regulären Ausdruck lösen.

Ich habe etwas, dass jedoch nicht funktioniert:
if ($skalar =~ m/[13-52]/) {}
mir ist schon klar, warum es nicht funktioniert...aber rein vom logischen her soll es so sein. Danke!
renee
 2006-11-01 09:18
#71273 #71273
User since
2003-08-04
14371 articles
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
/^(?:1[3-9])|(?:[2-4][0-9])|(?:5[0-2])$/
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
esskar
 2006-11-01 10:27
#71274 #71274
User since
2003-08-04
7321 articles
ModeratorIn

user image
aber schnell macht es das nicht?
pq
 2006-11-01 11:08
#71275 #71275
User since
2003-08-04
12208 articles
Admin1
[Homepage]
user image
[quote=Guest,31.10.2006, 23:48]Ich weiß dass ich das leicht mit if ($skalar > 52 or $skalar < 13) {} möglich ist, ich möchte das jedoch mit einem regulären Ausdruck lösen.[/quote]
warum?


[quote=googlegroups,1.11.2002, 16:51]Q: I want to talk to someone 3,000 miles away.  This is easy to do with
a telephone, but how is it done with a coffee mug?

A: It isn't done with a coffe mug, use the telephone.[/quote]
http://groups.google.com/groups?.....com%3E

hmm, der link funktioniert nicht mehr. offenbar kann man bei google-
groups nicht mehr ueber die message-id zugreifen.
naja, das musste ja irgendwann so kommen.\n\n

<!--EDIT|pq|1162373530-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
wickedjack
 2006-11-01 12:31
#71276 #71276
User since
2006-02-03
6 articles
BenutzerIn
[default_avatar]
#ich bin der Ersteller (Marcel)
hehe hab schon verstanden...ich dachte nur, dass es vllt eine einfachere Lösung gibt als das mit if kleiner und if größer zu lösen. Quasi einfach zu überprüfen ob sich eine Zahl X in einer bestimmten Zahlenmenge(z.B. [13 .. 52]) wiederfindet. Gibt es da vllt etwas? thx
esskar
 2006-11-01 12:33
#71277 #71277
User since
2003-08-04
7321 articles
ModeratorIn

user image
[quote=pq,01.11.2006, 10:08]hmm, der link funktioniert nicht mehr. offenbar kann man bei google-
groups nicht mehr ueber die message-id zugreifen.
naja, das musste ja irgendwann so kommen.[/quote]
vielleicht hat es damit zu tun: http://www.heise.de/newsticker/meldung/80276 ?
renee
 2006-11-01 13:30
#71278 #71278
User since
2003-08-04
14371 articles
ModeratorIn
[Homepage] [default_avatar]
Was meinst Du mit "einfacher"? Schneller? übersichtlicher? kürzer?

TIMTOWTDI

Code: (dl )
1
2
3
4
my $skalar = 13;
if(grep{$_ == $skalar}(13..52)){
print "yes\n";
}


Code: (dl )
1
2
3
4
5
use List::Util;
my $skalar = 14;
if(first {$_ == $skalar}(13..52)){
# ...
}


Code: (dl )
1
2
3
4
5
6
7
8
my %hash;
my @array = (13..52);
@hash{@array} = @array;

my $skalar = 132;
if(exists $hash{$skalar}){
print "yes\n";
}


Aber das mit den zwei if's dürfte das schnellste und so ziemlich am besten lesbar sein...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pq
 2006-11-01 13:46
#71279 #71279
User since
2003-08-04
12208 articles
Admin1
[Homepage]
user image
[quote=esskar,01.11.2006, 11:33]vielleicht hat es damit zu tun: http://www.heise.de/newsticker/meldung/80276 ?[/quote]
nein, es handelt sich ja hier um ein posting aus dem jahre 2002.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
pq
 2006-11-01 13:52
#71280 #71280
User since
2003-08-04
12208 articles
Admin1
[Homepage]
user image
[quote=wickedjack,01.11.2006, 11:31]ich dachte nur, dass es vllt eine einfachere Lösung gibt als das mit if kleiner und if größer zu lösen. Quasi einfach zu überprüfen ob sich eine Zahl X in einer bestimmten Zahlenmenge(z.B. [13 .. 52]) wiederfindet. Gibt es da vllt etwas? thx[/quote]
um herauszufinden, ob sich $x zwischen $y und $z befindet, sagt man
$x > $y and $x < $z.
was ist jetzt daran schwer? klar, du kannst auch
if ( grep {$x == $_} $y..$z )
machen. damit findest du heraus, ob sich $x in der menge $y..$z
befindet. aber das ist ja letztendlich umstaendlicher. und viel langsamer.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
topeg
 2006-11-01 20:45
#71281 #71281
User since
2006-07-10
2611 articles
BenutzerIn

user image
Mit so einem RegExp geht es auch:
Code: (dl )
/^(??{join('|',(13..52))})$/
<< |< 1 2 >| >> 13 entries, 2 pages



View all threads created 2006-11-01 00:48.