Thread Dateiendung mit RegEx (5 answers)
Opened by PETER_PAN2009 at 2011-03-28 17:28

topeg
 2011-03-28 18:13
#147007 #147007
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
2011-03-28T15:28:36 PETER_PAN2009
Hallo Leute!

Ich habe gerade ein schönes Beispiel in Bezug auf "Dateiendung mit Perl extrahieren" gefunden und wollte mal fragen, was das [0] eigentlich bedeutet?
Code (perl): (dl )
my $ext = ($file =~ m{([^.]+)$})[0]

=~m sucht nach den regulären Ausdruck im geben Text. Im Skalaren Kontext gibt es die Anzahl der Treffer zurück im Listen Kontext gibt es die Matches (alles was in (...) steht) zurück.

Gleichwertige Schreibweisen:
Code (perl): (dl )
1
2
3
4
5
my $ext;
if($text=~m/([^.]+)$/)
{
  $ext=$1;
}

Code (perl): (dl )
1
2
3
4
5
my $ext;
if(my @results=$text=~m/([^.]+)$/)
{
  $ext=$results[0];
}

Code (perl): (dl )
1
2
my @results=$text=~m/([^.]+)$/;
my $ext=$results[0];

Code (perl): (dl )
my $ext=($text=~m/([^.]+)$/)[0];



2011-03-28T15:28:36 PETER_PAN2009
Die zweite Frage:
Wenn die Datei keine Endung hat(z.B. D:/test/Logger) soll es ebenfalls in der $ext gespeichert werden.
Mit dem Versuch
Code (perl): (dl )
my $ext = ($file =~ m{([^.]+)$})[0] || ($file =~ m{.*Logger$}[0]

hatte ich leider nicht so viel Erfolg :-(!

Nutzt du strict und warnings? dann solltest du eine nützliche Fehlermeldung bekommen. Ich sehe den Fehler aber schon so. Du hat eine Klammer vergessen:
Code (perl): (dl )
my $ext = ($file =~ m{([^.]+)$})[0] || ($file =~ m{.*Logger$})[0];

Wobei ich es so übersichtlicher finde:
Code (perl): (dl )
1
2
my $ext=($file =~ m{([^.]+)$} )[0];
   $ext=($file =~ m{.*Logger$})[0] unless($ext);

Man muss nicht immer alles in eine Zeile quetschen.

View full thread Dateiendung mit RegEx