Warum funktionert dieses ereg-Script nicht?

Ensign

Mitglied
Hi Leute!

Ich möchte im Weitesten Sinne BIlder per id aus einer Datenbank holen und dann in einem Textfeld so etwas wie [img="24"] ersetzen lassen. Damit das dynamisch funktioniert habe ich ein Script nach endlos langer Suche gefunden. Es ist vom php-center und unter http://www.php-center.de/artikel/dynamisch_ersetzen.php3 zu finden. Ich habe dieses Script nun ausprobieren wollen, jedoch funktioniert es nicht! Hier der Code:

PHP:
function BierLink($Marke) {
$homepage["Reissdorf"] = "http://www.reissdorf.de";
$homepage["Früh"] = "http://www.frueh.de";
$homepage["Gaffel"] = "http://www.gaffel.de";
$homepage["Dom"] = "http://www.domkoelsch.de";
$homepage["Päffgen"] = "http://www.paeffgen-koelsch.de";
$zurueck = "<a href='".$homepage[$Marke]."'>$Marke</a>";
return $zurueck;
}
$text = "Blabal »Reissdorf« Blabla »Früh« ";
 
while (ereg("»([^[:alnum:]+[^«]$])«", $text, $regs)) {
$text = str_replace($regs[1], BierLink($regs[1]), $text);
}
echo $text;

Ich versteh nicht warum das nicht gehen kann.. Hoffentlich wisst ihr weiter!

Vielen Dank schon im Voraus,

Ensign
 
Hi,

ich glaube der Reguläre Ausdruck ist nicht ganz richtig.

"»([:alnum:]+[^«])«"

Kannst auch mal folgendes probieren:

preg_match('/»([^«]+)«/i',$text,$regs);

print_r($regs);
 
So, hab's ausprobiert, aber es funktioniert nur so halb.

PHP:
 function BierLink($Marke) {
$homepage["Reissdorf"] = "http://www.reissdorf.de";
$homepage["Früh"] = "http://www.frueh.de";
$homepage["Gaffel"] = "http://www.gaffel.de";
$homepage["Dom"] = "http://www.domkoelsch.de";
$homepage["Päffgen"] = "http://www.paeffgen-koelsch.de";
$zurueck = "<a href='".$homepage[$Marke]."'>$Marke</a>";
return $zurueck;
}
$text = "Blabal Blabla »Früh« »Reissdorf« ";
while(preg_match('/»([^«]+)«/i',$text,$regs)) {
 $text = str_replace($regs[1], BierLink($regs[1]), $text);
}
echo $text;

Wenn ich das ganze in eine while-Schleife stecke, dann bleibt das Script ewig lang hängen. Zu sehen auf www.webplexx.net/ereg_repl.php Warum?
 
Du musst als ersten Paramter von str_replace nicht regs[1], sondern $regs[0] nehmen. Sonst bekommst Du eine Endlosschleife.

$text = str_replace($regs[0], BierLink($regs[1]), $text);
 
Wow, funktioniert ja perfekt! VIELEN, VIELEN DANK!

Jetzt brächt ich nur noch bei einer Kleinigkeit Hilfe. Ich will folgenden Code zur Erkennung und Umwandlung verwenden: [GAL="id"]. Der Part zwischen den Anführungszeichen soll übernommen werden. Doch wie geb ich das in den preg_match ein? Hab es so probiert, geht aber nicht:

PHP:
 $text = "Blabal Blabla [GAL=\"Gaffel\"]";
preg_match('[GAL=/"([^"]+)"/i]',$text,$regs));

Wie muss ich diesen Mittelpart ändern?
 
Oder vielleicht hat irgendjemand eine Ahnung wo man diese seltsamen Zeichen erklärt bekommt. Ich hab leider keinen Link zu den Zeichenerklärungen in den verschiedenen Manuals gefuden. Wird doch nicht sooo schwer sein nur ein [gal=""] zur ekennen und den Wert zwischen den "" herauszulasen beim preg_match(), oder?
 
Ein tutorial dass ich recht gut finde ist das auf php/Quakenet .

Mit
PHP:
$text = stripslashes("blubb bla [GAL=\"Gaffel\"]");
preg_match('#GAL="([^"]+)"#',$text,$regs);

müsstest du die Marke auslesen können.

Auch ganz toll: Der Regex coach . Damit kannst du einen regex auf einen Text erstellen und gleichzeitig siehst du ob er passt
 
$text = "Blabal Blabla [GAL=\"Gaffel\"]";
preg_match('/\[([^=]+)="([^"]+)"\]/i',$text,$regs));

Dadruch bekommst Du sowohl alle Ausdrück vor dem =-Zeichen, als auch alles, was innerhalb der Anführungzeichen steht.
 
SUPER! :-)

Damit es mit den Klammern vorn und hintern funktioniert hab ich's so abgeändert:

PHP:
preg_match('#\[GAL="([^"]+)"\]#',$text,$regs);

Also, vielen Dank für eure Hilfe!
 
Zurück