Thread Aus einer Variable für REGEX code ausführen? (9 answers)
Opened by toby at 2008-02-05 00:52

Linuxer
 2008-02-05 01:56
#105562 #105562
User since
2006-01-27
3882 Artikel
HausmeisterIn

user image
Hi,

Deine Variable $regex enthaelt einen String 'y/;print time()'. Mehr ist das für Perl nicht.
In Deiner Regex wird diese Variable interpoliert, d.h. durch ihren Inhalt ersetzt. Danach wird der Regex ausgewertet. Lässt Du nun eine Klammer beim time() weg, meldet Perl einen Fehler, weil die Klammer im Regex eine Sonderbedeutung hat. In ihrer Sonderbedeutung muss die Klammer immer paarweise auftreten! Daher die Fehlermeldung.

Für das was Du vorhast, kann ich mir im Moment keine saubere Lösung vorstellen.

Insgesamt komm ich zu drei Aussagen:

1.
Wenn man sich mal Deine Ersetzung veranschaulicht, stellt sich bereits die Frage, was dabei denn rauskommen soll. Spätestens das Kommando time()z/; wird einen Fehler generieren.

Code: (dl )
print "ja\n" if "xyz" =~ m/xy/;print time()z/; 


2.
Wenn sich Dein Begrenzer des Regex ändert, ändert sich das Verhalten wieder grundlegend und der Regex wird, selbst bei gewünschter Arbeitsweise, nicht abgebrochen.
Ein Regex muss nicht mit // begrenzt werden; es können verschiedenste Zeichen als Begrenzer auftreten; / ist dabei vielleicht das üblichste, # und ! sind auch nicht unüblich und die verschiedene Klammerungen sind auch nicht abwegig.

Code: (dl )
print "ja\n" if "xyz" =~ m{xy/;print time()z}; 


3.
Denke noch mal über dein Vorhaben/Problem nach und formuliere es neu.
Dann kann man evtl. auch sinnigere Lösungswege aufzeigen.

Greetz,
Linuxer

PS: mögliche Denk- und Formulierungsfehler sind auf die Tageszeit zurückzuführen. Gute Nacht.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Aus einer Variable für REGEX code ausführen?