RegEx Fehler

Nambot

Mitglied
Hallo!
Eigentlich ist der RegEx relativ simpel, aber irgendwie will er einfach nicht klappen und ich weiß nicht wieso ...
Also erstmal folgender String:
Code:
<htmltag><$variable></htmltag>
So jetzt möchte ich diese Variable ersetzen.
Mein RegEx, sieht jetzt so aus:
Code:
/<\$(.*)>/isU
Aber er findet einfach nichts. habe schon probiert die spitzen Klammern zu escapen. Eigentlich alle Möglichkeiten mit den spitzen Klammern und dem Dollar-Zeichen, aber nichts funktioniert. Ist wahrscheinlich ein einfacher Fehler, abe rich finde ihn nicht.
Ich hoffe ihr könnt mir helfen.
 
Also ich hätte den so angegeben:

/<\$([^>]+)>/

Warum er nichts findet weiß ich nicht. Dein Ausdruck würde auch zu viel finden. Nämlich:
<$variable></htmltag>

Marcus.
 
Da findet er leider auch nichts.
Wenn jemand eine Lösung parat hat wie man alle Varieblen, die einfach normal, ohne spitze Klammern, notiert sind rausfiltert bzw. ersetzt, reicht mir das auch. Hauptsache das funktioniert :-)
 
Lass dir mal den String vor dem RegEx ausgeben.

Ich würde sagen er interpretiert dein $variable. Sprich wenn sie gefüllt ist, setzt er den Wert ein, andernfalls ist sie leer. Wenn die Variable leer ist, kannst du auch nichts finden.

PHP:
$str = "<htmltag><iiiiiiiiiiiiiiiii></htmltag>";
preg_match('/<htmltag><(.*)><\/htmltag>/', $str, $t);
var_dump($t);

Das hier liefert dir einen Treffer.
 
Folgender regulärer Ausdruck ist für einfache PHP-Variablen:
Code:
\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
 
Was machen die Optionen s und U?
U, damit er nicht gierig ist. s damit er zeilenweise sucht. Ist nicht unbedingt notwendig, aber ohne findet er auch nichts.
Lass dir mal den String vor dem RegEx ausgeben.
Hab ich gemahct, die Variablen werden nicht interpretiert.
PHP:
$str = "<htmltag><iiiiiiiiiiiiiiiii></htmltag>"; 
preg_match('/<htmltag><(.*)><\/htmltag>/', $str, $t); 
var_dump($t);
Das hier liefert dir einen Treffer.
Ja, aber nur wenn explizit diese HTML Tags um die Variable sind und diese ohne Dollarzeichen geschrieben wird. Wenn ich den modifiziere, dass jeglicher HTML Tag um, die Variable sein kann, funktioniert es, aber sobald ich das Dollarzeichen dazuschreibe, geht es nicht mehr (ja, habe es escapt mit \). Dabei scheint irgendwas nicht zu klappen.
Folgender regulärer Ausdruck ist für einfache PHP-Variablen:
Code:
\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
Blick zwar ehrlich gesagt, nicht ganz durch, bei dem RegEx, aber das Problem ist ja, dass in der HTML Datei, die Variablen nicht durch bestimmte Zeichen abgetrennt sind. Der Anfang ist zwar immer mit einem Dollarzeichen gekennzeichnet, aber das Ende eben nicht. Da können spitze Klammer, Anführungszeichen, Leerzeichen oder ähnliches stehen. Da der RegEx nichts findet, denke ich mal, dass ist das Problem, aber ich weiß es nicht genau, da ich bei dem RegEx nicht durchblicke.

Also da das Problem anscheinend auftritt, sobald das Dollarzeichen in den RegEx geschrieben wird, ist da wohl irgendwas faul. Die Frage ist nur was? Habt ihr eine Idee?
 
Zuletzt bearbeitet:
Also ich habe den Fehler gefunden. Das Dollarzeichen muss doppelt escapet werden, also mit 3 Backslashes. Das liegt daran, dass es durch das einfach Escapen nur die Funktion als Variableneinleiter und nicht gleichzeitig noch für die RegEx escapet wird.
Wenn man nur einfache, anstatt doppelte Anführungszeichen verwendet, sollte das Problem nicht auftreten.
 
Zurück