DIO2000: Regexps mit Variablen ($Variable =~ $Regexp)

Moin moin,
ich habe mich im Forum und im gesamten I-net vergeblich umgesehen, jetzt versuche ich es mal auf diese Weise...

Ich habe folgendes Problem:
irgendwo glaube ich mal gelesen zu haben, das ich sowas in Perl machen kann:
$Regexp = "s/(abc)(xyz)/$2/g";
$String =~ $Regexp;

Wenn dies nicht der Fall ist, dann sind natürlich alle weiteren Erklärungen überflüssig, falls aber doch, dann kommen wir gleich zum nächsten Punkt.
Regexp Userabfrage und Anwendung
        print "Suchausdruck eingeben\t";
        $Regexp = <STDIN>;
        $Regexp =~ s/\n$//g;
        $Regexp =~ s/\n$//g;
        $Regexp =~ s/\n/\n/g;
        $Regexp =~ s/\t/\t/g;
        $Regexp =~ s/\r/\r/g;
        $Regexp =~ s/\f/\f/g;
        #$Regexp =~ s/$/$/g;
        $File =~ s/[\r\n]//g;
        $Regexp = "$Regexp";
        $File =~ $Regexp;

Wenn ich also vom Benutzer einen Ausdruck abfrage, dann kommt PERL mit "s/(abc)(xyz)/$1/g" nicht klar. Denn $1 wird immer als String interpretiert, ich habe trotz aller möglicher suchen-ersetzen-Funktionen nicht geschafft das $1 als Variable erkannt wird. Auch der Anhang /e ist nutzlos. Ich habe auch schon die Version

$File =~ s/$Regexp_search/$Regexp_replace/g;

probiert. Ist aber genau der gleiche Scheiß. Falls jemand das Problem kennt, bin ich für Informationen sehr dankbar.

MFG DIO2000

  1. Hi,

    Ich habe folgendes Problem:
    irgendwo glaube ich mal gelesen zu haben, das ich sowas in Perl machen kann:
    $Regexp = "s/(abc)(xyz)/$2/g";
    $String =~ $Regexp;

    kann ich gar nicht so recht glauben.

    $Regexp ist ja in deinem Fall ein String. Du kann einen String einem RegExp zuweisen indem du =~ verwendest aber danach sollte auch ein RegExp folgen also:

    $String =~ s/(abc)(xyz)/$2/g;

    Eine andere Möglichkeit ist mir nicht bekannt, aber ich hab auch PERL nicht ganz so ausgiebig studiert ;)

    Gruss
    Stefan

    1. also s/$Regexp-search/$Regexp-replace/g funktioniert, aber ich kann halt keine Rückreferenzen angeben, wie oben schon erwähnt.

      Aber diese Belegung funktioniert:
      $Regexp-search = 'hallo';
      $Regexp-replace = 'guten tag';

      funktioniert auf jeden fall. Hmm ich bekomm einfach keine Infos im Netz. Wenn noch jemand irgendwas weiß, bitte posten .. ist für die Arbeit...

      Vielen Dank im Vorraus

      DIO2000