Peter: RegExp: wer versteht replace?

Hi Leute,
bin gerade dabei eine Menge Verweise umzuändern. Der Suchmechanismus von Homesite über regular Expressions funktioniert gut. Leider werden jedoch die variablen Bereiche nicht in den replace Mechanismus übernommen.
Z.B.:
Suche in allen Unterordnern:

'href="/+[0-9a-z_]+/index.html" id="cnavi" '

ersetze:
'href="+[0-9a-z_]+/index.html" id="cnavi" '

Ersetzt 1:1 den String in eckigen Klammern.

Was mache ich falsch?

Viele Grüße
Peter

  1. Hallo Peter

    bin gerade dabei eine Menge Verweise umzuändern. Der Suchmechanismus von Homesite über regular Expressions funktioniert gut. Leider werden jedoch die variablen Bereiche nicht in den replace Mechanismus übernommen.

    Also ich hab mit HomeSite und regulaeren Ausdruecken bei der Suche immer nur Probleme gehabt. Seitdem nehme ich lieber andere Editoren dafuer, die das auch koennen, z.B. Textpad. Oder gleich ein kleines Perl-Script schreiben, damit ist man am flexibelsten ...

    viele Gruesse
      Stefan Muenz

    1. Hallo Stefan

      Oder gleich ein kleines Perl-Script schreiben, damit ist man am flexibelsten ...

      Bin in Perl (noch) nicht so fit. Tja, was will man nicht alles lernen!
      Könntest Du mir eines von Deinen zuposten: verstehen und ändern kann ich ganz prima ;-)

      viele Gruesse
      Peter Stadie

      1. Hallo Peter

        Könntest Du mir eines von Deinen zuposten: verstehen und ändern kann ich ganz prima ;-)

        Ein Beispiel, um eine einzelne Datei zu bearbeiten:

        =============================================
        #! perl
        $File = "/der/pfad/zur/datei.htm";
        open(DAT,"<$File");
        @lines = <DAT>;
        foreach $line (@lines) {
        $line =~ s/suchenach/ersetzedurch/g;
        }
        close(DAT);
        open(DAT,">$File");
        print DAT @lines;
        close(DAT);

        Und ein Beispiel, das *.htm in einem Verzeichnis bearbeitet:

        =============================================
        #! perl

        $Dir = "/der Pfad/";
        $Mask = ".*.htm";
        opendir DIR, $Dir;
        @entries = readdir(DIR);
        closedir DIR;
        foreach $entry (@entries) {    
            if($entry =~ /$Mask/) {
                 push(@files,$entry);
                }
        }
        foreach $file (@files) {
          @lines = "";
          $pathfile = $Dir.$file;
          open(FILE,"<$pathfile");
          @lines = <FILE>;
          close(FILE);
          foreach $line (@lines) {
            $line =~ s/suchenach/ersetzedurch/g;
          }
          open(FILE,">$pathfile");
          print FILE @lines;
          close(FILE);
        }

        viele Gruesse
           Stefan Muenz

  2. Hallo Peter

    'href="/+[0-9a-z_]+/index.html" id="cnavi" '

    ersetze:
    'href="+[0-9a-z_]+/index.html" id="cnavi" '

    Ersetzt 1:1 den String in eckigen Klammern.

    Was mache ich falsch?

    Versuchs mal mit folgenden REs:
    Suchen: href="/([a-zA-Z0-9_]+)/index.html" id="cnavi"

    Ersetzen: href="\1/index.html" id="cnavi"

    Wichtig ist, dass Du den variablen Teil des RE (der in Replace wieder eingesetzt werden soll) mit Klammern umschliesstt.
    Anschliessend kannst Du im Ersetzen-Feld auf jedes Klammmerpaar über \1 (für das 1. Klammerpaar), \2 (für das 2.), usw. zugreifen
    Diese nennt man übrigens Backreferences. Mehr dazu findes Du in der Hilfe zu Homesite unter "Using Search and Replace", bzw. "Searching with Regular Expressions".

    Grüsse
    Tom