Kleines Regex Problem
Chrisi
- php
Hallo zusammen,
ich hänge mal wieder an einem dummen Problem mit meinen Regex:
$links = preg_replace("/href="(.*?)"/e", "href="'.$this->funk('\1').'"", $links);
Error: Parse error: parse error, unexpected '='
Setze ich aber vor das = einen \ bringt es nichts.
Die Variable $links enthält eine Reihe an Links im HTML Format und ich möchte von jedem Link die Stelle zwischen href="" erwischen dann mit $this->funk nachbearbeiten und anschliessend soll die Änderung in $links ünbernommen werden.
Kann mir jemand sagen wo mein Fehler liegt ?
Viele Grüße und danke, Chrisi ..
Huhu Chrisi
Kann mir jemand sagen wo mein Fehler liegt ?
Ist Dir ist die Bedeutung des 'e'-Modifiers bekannt?
Viele Grüße
lulu
Hi,
Ist Dir ist die Bedeutung des 'e'-Modifiers bekannt?
Ja denke schon, er soll mir das was er vorher in meiner Regex (.*?) gefunden hat als \1 bereitstellen, oder ?
Grüße, Chrisi ..
Hi Chrisi,
Ist Dir ist die Bedeutung des 'e'-Modifiers bekannt?
Ja denke schon, er soll mir das was er vorher in meiner Regex (.*?) gefunden hat als \1 bereitstellen, oder ?
Nein, der soll den Inhalt des zweiten Parameters als PHP Code behandeln.
MfG, Dennis.
Hi,
Neue Infos neues Glück:
$links = preg_replace("/href="(.*?)"/e", "'href="'.strtoupper('\1').'"'", $links);
Danke nun klappt es :)
Grüße, Chrisi ...
Hi Chrisi,
$links = preg_replace("/href="(.*?)"/e", "'href="'.strtoupper('\1').'"'", $links);
Mal eine andere Frage: Warum willst du eine URL in Großbuchstaben umwandeln lassen? Dadurch wird die URL in 90% aller Fälle ungültig!
Ferner dürfte es hier ein Problem geben, wenn in deinem Text ($links) zwei mal href="" vorkommt - dann wird dieser Regex von dem ersten href=" bis zum letzen " matchen.
Um das zu entgehen, kannst du entweder noch die Modifier U anhänger (ungreedy = ungefräßig) oder statt .* einfach die Zeichenklasse [^"]* verwenden (alle Zeichen außer ").
MfG, Dennis.
Hi Dennis,
Warum willst du eine URL in Großbuchstaben umwandeln lassen? Dadurch wird die URL in 90% aller Fälle ungültig!
Sorry sollte nicht so rüberkommen, die Url wird hier bei mir nicht in Großbuchstaben umgewandelt, ich rufe eine eigene Funktion auf die mir den Query in eine Modrewrite freundliche Url umwandelt.
strtoupper() war hier nur ein Beispiel.
ungreedy = ungefräßig)
Du bist sehr vorrausschauend :) Ich habe die "Gier" mit dem ? im (.*?) gestoppt, aber deine Idee mit dem U oder [^"]* ist auch gut.
Soweit klappt es auch mit mehreren Links.
Danke nochmal und viele Grüße, Chrisi
Noch eins hinterher,
Ich habe bemerkt das die Ausführung von Code mit dem modifier e in classen anders behandet wird, bzw. erstmal garnicht :)
preg_replace("/href="(.*?)"/e", "'href="'.trim($this->funk('\1')).'"'", $links)
Oben einmal der Aufruf einer Methode die nicht in der Classe deklariert und einmal eine aus der selben Classe. Es ist anscheinend notwendig \ diesen vor die interne Methode zu stellen.
Weis jemand wieso das so ist ?
Grüße, Chrisi
Tach,
$links = preg_replace("/href="(.*?)"/e", "href="'.$this->funk('\1').'"", $links);
Wer " sagt darf nicht ' sagen :)
Du leitest Deinen ersten String
"href="'
mit einem " ein, schliesst ihn aber mit einem '.
Ebenso mit dem letzten String, da eröffnest du mit ' und schliesst mit ".
$links = preg_replace("/href="(.*?)"/e", "href="".$this->funk('\1').'"', $links);
sollte eher funken (ohne Gewähr).
Grüße,
Jörg