Carsten: Script funktioniert nur fast 100% (nur bei 1 Treffer)

Beitrag lesen

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.