Schrift
[thread]12276[/thread]

Problem mit Regular Expressions

Leser: 1


<< >> 3 Einträge, 1 Seite
Gast Gast
 2008-07-30 19:34
#112917 #112917
Hallo.

Ich verzweifel hier gerade als Perl-Einsteiger an den Regular Expressions.

Könnte mir jemand sagen, warum das hier false ergibt?

Code: (dl )
1
2
3
4
5
6
7
8
$test1 = "18.02.2008";

if($test1 =~ "m/^\d{2}\.\d{2}\.(\d{4})$/" ){
printf("TRUE\n");
}
else{
printf("FALSE\n");
}


Danke.

mfg,
Daniel
GwenDragon
 2008-07-30 20:17
#112919 #112919
User since
2005-01-17
14533 Artikel
Admin1
[Homepage]
user image
Verwende bitte in deinen Skripten:
use strict;
use warnings;
use diagnostics;

korrekter wäre das so:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl

use strict;
use warnings;
use diagnostics;

my $test1 = "18.02.2008";

if($test1 =~ m/^\d{2}\.\d{2}\.(\d{4})$/ ){
print("TRUE\n");
}
else{
print("FALSE\n");
}
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

FIFO
 2008-07-30 20:54
#112921 #112921
User since
2005-06-01
469 Artikel
BenutzerIn

user image
Gast+2008-07-30 17:34:23--
Könnte mir jemand sagen, warum das hier false ergibt?

Code: (dl )
1
2
3
4
5
6
7
8
$test1 = "18.02.2008";

if($test1 =~ "m/^\d{2}\.\d{2}\.(\d{4})$/" ){
printf("TRUE\n");
}
else{
printf("FALSE\n");
}


Die Gründe fürs Scheitern:

1. Die Anführungsstriche um den RegEx-Term sind fehl am Platz.
2. Falsche Verwendung von printf statt print

Die Klammern um \d{4} solltest Du nur setzen, wenn Du mit diesem Fundstück später was anfangen willst, Du findest es dann in der Variable $1 (im Beispiel wäre $1 dann '2008').

lies mal perlvar
Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it? -- Brian Kernighan: "The Elements of Programming Style"
<< >> 3 Einträge, 1 Seite



View all threads created 2008-07-30 19:34.