Nemesis: RegEx - Zeichenkette von hinten durchsuchen?!

Hallo liebes Forum,

ich habe momentan folgendes Problem. Ich bekomme an mein Perlskript einen absoluten Pfad übergeben (C:\abc\def\ghi\jkl), nun lese ich eine Datei in welcher sich bestimmte Dateitypen, nach denen es zu filtern gilt befinden. Also zum Beispiel:

  
*.pl  
*.pm  
*.cpp  
..\*.ab  
..\..\*.h

So, je nachdem wie viele ".." ich jetzt vor solch einem Dateitypen in dieser Datei finde, also beispielsweise bei *.h wären es zwei Ordner unter dem aktuellen Verzeichnis in welchem ich mich befinde, möchte ich von dem absoluten Pfad die letzten n Verzeichnisse entfernen:

  
Alter Pfad: C:\abc\def\ghi\jkl  
  
Datei:  
../*.pl (Gefunden 1x "..\")  
  
Neuer Pfad: C:\abc\def\ghi  

Geht das? Wenn ja wie? Ich habe bisher nichr ausgefunden wie ich z.B. per RegEx vom Ende eines Strings, anstelle des Anfangs, zu suchen beginne.

Vielen Dank für eure Hilfe,

LG.

  1. Hallo,

    entschuldigt den Doppelpost, aber ich weiß nicht wie man hier editieren kann! Ich habe eben, kurz nach meinem Posting selbst die Lösung gefunden:

      
      
    my $olddir = 'C:\abc\def\ghi'  
    my $newdir = '';  
      
    foreach(@files) {  
      
      my $anz = my @anz = ( $_ =~ /\.\.\\|\.\.\//g );  
      
      for(my $i = 0; $i < $anz; $i++) {  
      
         my $res=rindex($dir,"\\");  
         $newdir = substr($dir,0,$res);  
      }  
      
      print $newdir;  
    }  
    
    

    Ich nehme also die Zeichenketten aus der Datei, zähle wie oft ein ..\ oder ../ vorkommt. Dann entferne ich in einer Schleife so oft alle Zeichen bis zum letzten "" und schon habe ich die Pfad eingekürzt und mein Problem ist gelöst.

    Wenn jemand eine bessere Methode kennt bin ich trotzdem für eure Hilfe dankbar!!!

    LG.

    PS: Den Code oben habe ich eben so getippt und nicht aus meinem file genommen, sind also Fehler drin - Sorry

    1. hi,

      Wenn jemand eine bessere Methode kennt bin ich trotzdem für eure Hilfe dankbar!!!

      use File::Basename;
          ($name,$path,$suffix) = fileparse($fullname,@suffixlist)

      Tipp: Auch unter Win32 gehts mit "/" in den Pfaden.
      nochn Tipp: File::Basename geht auch auf URLs anzuwenden.

      Hotte

      --
      Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
  2. @@Nemesis:

    nuqneH

    Ich habe bisher nichr ausgefunden wie ich z.B. per RegEx vom Ende eines Strings, anstelle des Anfangs, zu suchen beginne.

    '$' steht für das Stringende.

    Sowas in der Art ([^]+)\[^]+\([^]+)$ sollte dir weiterhelfen.

    Qapla'

    --
    Bildung lässt sich nicht downloaden. (Günther Jauch)