Hi Stefanie,
Call to unsupported or undefined function preg_match()<<
Das sagt es bei meinem Provider auch immer, da fehlt zwar nur ne Zeile in der Konfiguration,
aber sei's drum.
Und Deine Version vom 'ereg' klappt leider nur beim ersten [bild...].
*grmbl* ja. Steht ja auch da:
Matche ein [bild:irgendwas] und nicht matche viele [bild:irgenwas] mit was dazwischen.
Leider fällt mir nix richtig tolles dazu ein, nur was neues:
Die erste Lösung ist etwas arg wirr aufwendig. Immerhin sieht man hier wozu der Rückgabe-
wert von ereg(), der bei dir noch im $bla ungenutzt versackt benutzt werden kann. (Er ist true, wenn
das ereg() gematched hat und false wenn nicht.)
$test = "xxx [bild:logo1.jpg] xxx [bild:logo2.jpg] xxx";
$tmp=$test; // in $tmp steht der noch nicht geprüfte Rest
while(ereg("[bild:([^\n ]*)](.*)",$tmp,$regs)) // solange der Ausdruck matched
{
$tmp=$regs[2];
// TEST Ausgabe ***************
for ($i=1;$i<count($regs);$i++)
{
echo "$i: $regs[$i]<br>";
}
echo "<br>";
// Ende - TEST Ausgabe ***************
$test = str_replace("[bild:$regs[1]]","<a href="$regs[1]">$regs[1]</a>",$test);
// da hier nur ein 'festes' suchen/ersetzen gebraucht wird reicht str_replace
// macht aber das selbe wie bisher.
}
echo "<hr>$test<hr>";
So und nur Lösung 2: Die zaubert einfach ein ... zwei neue Kaninchen aus dem Hut:
$test = "xxx [bild:logo1.jpg] xxx [bild:logo2.jpg] xxx";
$test = ereg_replace("[bild:([^\n ]*)]","<a href="\1">\1</a>",$test); // Ja, diese eine Zeile ist alles
echo "<hr>$test<hr>";
Erstens ereg_replace() ;
und zweitens sogenannte Backward References (Rückwärts-Bezüge).
\1 setzt den Wert aus dem ersten geklammerten Ausdruck wieder ein.
eigentlich kommen die ja erst im Kapitel für Fortgeschrittene aber hier sind sie mal sooooo
praktisch.