Regexps mit Variablen ($Variable =~ $Regexp)
DIO2000
- perl
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
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
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