Schrift
[thread]6621[/thread]

Reguläre Ausdrücke



<< >> 10 Einträge, 1 Seite
Fraser
 2005-01-10 14:29
#50690 #50690
User since
2005-01-10
10 Artikel
BenutzerIn
[default_avatar]
Hi Leute,

hab Probleme mit Regex
Kann mir jemand helfen??
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$muster = '(\d)\.([^\D])';
$text = 4.12;

if (@zahlen = $text =~ m/$muster/)
{print "(1) wahr: @zahlen\n";}
else
{print "(1) falsch: @zahlen\n";} # $1 ist 4 und $2 ist 1, deshalb wahr



if (@zahlen = $text !~ m/$muster/)
{print "(2) wahr: @zahlen\n";}
else
{print "(2) falsch: @zahlen\n";} # warum wahr:


$text = 4.0;
if (@zahlen = $text =~ m/$muster/)
{print "(3) wahr: @zahlen\n";}
else
{print "(3) falsch: @zahlen\n";} #warum falsch:


if (@zahlen = $text !~ m/$muster/)
{print "(4) wahr: @zahlen\n";}
else
{print "(4) falsch: @zahlen\n";} # warum wahr: 1
renee
 2005-01-10 14:50
#50691 #50691
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
eidt: mist...


Ich hoffe, Du hast den RegEx an sich verstanden!\n\n

<!--EDIT|renee|1105361636-->
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/
Fraser
 2005-01-10 16:24
#50692 #50692
User since
2005-01-10
10 Artikel
BenutzerIn
[default_avatar]
[quote=renee,10.01.2005, 13:50]eidt: mist...


Ich hoffe, Du hast den RegEx an sich verstanden![/quote]
Den RegEx hab ich schon verstanden. Ich check halt nur die Ausgabe nicht. Kannst du mir da helfen??
esskar
 2005-01-10 16:32
#50693 #50693
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
if wertet immer @zahlen aus, und zwar als scalar

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$muster = '(\d)\.([^\D])';
$text = 4.12;

if (@zahlen = $text =~ m/$muster/)
{print "(1) wahr: ", scalar @zahlen, "\n";}
else
{print "(1) falsch: ", scalar @zahlen, "\n";}    # $1 ist 4 und $2 ist 1, deshalb wahr



if (@zahlen = $text !~ m/$muster/)
{print "(2) wahr: ", scalar @zahlen, "\n";}
else
{print "(2) falsch: ", scalar @zahlen, "\n";}    # warum wahr:


$text = 4.0; # <- == 4, du wolltest eigentlich '4.0'
if (@zahlen = $text =~ m/$muster/)
{print "(3) wahr: ", scalar @zahlen, "\n";}
else
{print "(3) falsch: ", scalar @zahlen, "\n";}    #warum falsch:


if (@zahlen = $text !~ m/$muster/)
{print "(4) wahr: ", scalar @zahlen, "\n";}
else
{print "(4) falsch: ", scalar @zahlen, "\n";}    # warum wahr: 1

wird es jetzt deutlich?\n\n

<!--EDIT|esskar|1105367738-->
Relais
 2005-01-10 16:32
#50694 #50694
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Gib mal $text wieder aus. Aha!
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
format_c
 2005-01-10 16:33
#50695 #50695
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Deswegen.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$muster = qr'(\d)\.(\d)';
$text = 4.12;

if (@zahlen = $text =~ m/$muster/)
{print "(1) wahr: @zahlen\n";}
else
{print "(1) falsch: @zahlen\n";} # $1 ist 4 und $2 ist 1, deshalb wahr



if (@zahlen = $text !~ m/$muster/)
{print "(2) wahr: @zahlen\n";}
else
{print "(2) falsch: @zahlen\n";} # warum wahr: weil @zahlen immernoch die Ergebniss von vorher enthält


$text = 4.0;

if (@zahlen = $text =~ m/$muster/)
{print "(3) wahr: @zahlen\n";}
else
{print "(3) falsch: @zahlen\n";} #warum falsch: weil 4.0 zu 4 wird


if (@zahlen = $text !~ m/$muster/)
{print "(4) wahr: @zahlen\n";}
else
{print "(4) falsch: @zahlen\n";} # warum wahr: 1 weil das Muster eben nicht gefunden wird -> Ergebnis leer


Gruß Alex
esskar
 2005-01-10 16:36
#50696 #50696
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=format_c,10.01.2005, 15:33]if (@zahlen = $text !~ m/$muster/)
{print "(2) wahr: @zahlen\n";}
else
{print "(2) falsch: @zahlen\n";}    # warum wahr: weil @zahlen immernoch die Ergebniss von vorher enthält[/quote]
lüge! :)
format_c
 2005-01-10 16:39
#50697 #50697
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
mach doch mal @zahlen= weg. Dann siehst du das die Bedingung richtig funktioniert.
Edit: Komisch ist es aber schon. Wenn ich @zahlen vorher leere ist es trotzdem wahr.

Gruß Alex\n\n

<!--EDIT|format_c|1105368463-->
format_c
 2005-01-10 16:52
#50698 #50698
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Warum der Letzte Ausdruck 1 wieder gibt kann ich mir nur so erklären, dass diese Matching erfolglos ist somit nichts zurück gibt und der boolsche Ausdruck an das Array übergeben wird. Ähnlich wie:
Code: (dl )
1
2
3
4
5
6
my $text = 32;
my @array = $text > 5;
local $, = '|';
print @array;

1


Gruß Alex
esskar
 2005-01-10 17:01
#50699 #50699
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
das eine hat mit dem anderen nix zu tun;
es wird wie gesagt, @zahlen ausgewertet, und in @zahlen landen eben die gematchten sachen die in Klammern stehen, auch dann, wenn nicht der komplette ausdruck matcht => !~ gibt "" zurück, wenn unwahr, oder "true" wenn wahr

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
sub echo
{
  my ($text, @array) = @_;
 
  print "$text :";
  print " [", (join "][", map { defined $_ ? $_ eq "" ? "leer" : $_ : "undef" } @array ), "]\n";
}

$muster = '(\d)\.([^\D])';
$text = 4.12;

if (@zahlen = $text =~ m/$muster/)
{ echo "(1) wahr", @zahlen}
else
{echo "(1) falsch", @zahlen}



if (@zahlen = $text !~ m/$muster/)
{echo "(2) wahr", @zahlen}
else
{echo "(2) falsch", @zahlen}


$text = 4.0;
if (@zahlen = $text =~ m/$muster/)
{echo "(3) wahr", @zahlen}
else
{echo "(3) falsch", @zahlen}



if (@zahlen = $text !~ m/$muster/)
{echo "(4) wahr", @zahlen}
else
{echo "(4) falsch", @zahlen}
\n\n

<!--EDIT|esskar|1105369448-->
<< >> 10 Einträge, 1 Seite



View all threads created 2005-01-10 14:29.