manuel: Regexp: Suchmuster, das in einer Variablen steht, anwenden

Hallo zusammen!

Habe da ein Perl-Problem. Und zwar steht mein regulärer Ausdruck in einer Variablen. Leider scheint das aber nicht einfach so zu funktionieren.

Beispiel:
$regexp='s/@//';
$text='seriousvirus@gmx.net';
$text=~$regexp;
print $text;

Ausgabe: seriousvirus@gmx.net

$text='seriousvirus@gmx.net';
$text=~s/@//;
print $text;

Ausgabe seriousvirusgmx.net

Weis jemand von Euch, wie ich einen regulären Ausdruck, welcher in einer Variablen gespeichert ist, auf einen String anwenden kann?

Vielen Dank für Eure Antworten!

greez

manuel

PS: Mir ist schon klar, dass man das obenstehende Beispiel besser mit tr löst...

  1. Hallo Manuel!

    Nicht nur Dein Regex steht in einer Variablen, sondern auch die dazugehörige Funktion...

    Alternative:

    $regexpSubWhat='@';
    $regexpSubWith='';
    $text='seriousvirus@gmx.net';
    $text=~s/$regexpSubWhat/$regexpSubWith/;
    print $text;

    Falls Du wirklich nur einen regulären Ausdruck in einer Variablen hast, kannst Du die Variable innerhalb der Slashes problemlos verwenden.

    Viele Grüße,
    Stefan

    1. Es gibt auch noch die Möglichkeit des "Quote Regex", also eines Regexobjekts... Das würde so funktionieren:

      $regex = qr/@/

      Damit weist du Perl an, in die Variable $regex einen Ausdruck zu speichern, der später als Regex wieder interpoliert werden kann.

      Eine komplette Anweisung kannst du nicht als Regex speichern, das wäre, als wenn du "5 + 3" als String speicherst und hinterher 8 rausbekommen willst.

      In deinem Beispiel (gesetzt den Fall, der Ersetzungsstring ist immer leer) sähe das dann so aus:

      $ersetzt = s/$regex//g;

      Übrigens kannst du den Ersetzungsstring als ganz normale Variable (ohne "qr") speichern, denn das ist ja so oder so nur ein String.

      Hoffe, das hilft?!