preg_replace fehler

hallo!

hab ja weiter unten (http://www.wer-weiss-was.de/cgi-bin/forum/showarchiv…) was wegen ersetzen gefragt und hab mich mal hingesetzt; bekomme aber gerade eine merkwürdige fehlermeldung, mit der ich nix anfangen kann bzw. weiss nicht, wo der fehler liegt!
vielleicht kann mich ja wer erleuchten :smile:

fehlermeldung lautet:

Warning: preg\_replace(): Unknown modifier '8' in ...
Warning: preg\_replace(): Unknown modifier '9' in ...

(die zeilenangabe sind dann die preg_replaces)

folgendes ist mein testprogramm:
ich lasse

hallo hall [media]8[/media] mal kucken! hm, was geht??? [MEDIA]9[/MEDIA]

durch meine funktion laufen, die wie folgt aussieht:

function mediainc($str)
{
 preg\_match\_all(sql\_regcase("/\[media\]([0-9]+)\[\/media\]/"), $str, $matches);
 $i=0;
 while (count($matches[0])\>$i)
 {
 $id=$matches[1][$i];
 // Aus Datenbank $typ und $datei holen
 // Ersetzen
 if ($typ==1) // Graphik
 {
 $img="";
 $str=preg\_replace($matches[0][$i], $img, $str, 1);
 }
 if ($typ==2) // Datei
 {
 $src="[".$datei.""; $str=preg\_replace($matches[0...](media/%2522.%2524datei.%2522)

irgendwie vermute ich da probleme mit irgendwelchen zeichen, hab aber weiter keine ahnung…

hoffe jemand weiss mehr!

greets
Geisterkarle

Hallo,

ich denke, es liegt an der Funktion sql_regcase(), die du benutzt. Lass das mal weg und schreib als letztes Zeichen der Regex ein „i“ für PCRE_CASELESS (also case insensitive).

Das müsste dann so aussehen:

/\[media\]([0-9]+)\[\/media\]/i

Daniel

Das müsste dann so
aussehen:

/[media]([0-9]+)[/media]/i

Daniel

hiho!
hab ich mal getestet, aber der fehler bleibt :confused:

Hallo,

sorry, ich habe gerade gesehen, was hier falsch läuft. Du setzt einfach die Ergebnisse des Regex oben in weitere ein. Das geht so nicht. Ein Regex muss Delimiter haben, d.h. zwei Zeichen an Anfang und Ende, die die Grenzen klar machen. Üblicherweise nimmt man zwei Slashs. Außerdem solltest du natürlich auch wieder nach [media]Zahl[/media] suchen und nicht nur nach der Zahl.

Du müsstest also Folgendes Schreiben:

$str=preg_replace("/[media]".$matches[0][$i]."[/media]/i", $img, $str, 1);

Wenn ich mich jetzt nicht vertan habe, sollte das gehen.

Am besten wäre allerdings, wenn du preg_replace_callback nehmen würdest und in der callback-Funktion dann deine Datenbankabfrage erledigen würdest.

Daniel

thx
das war der fehler!

das mit der callback funktion kann ich mir ja noch irgendwann überlegen, aber bin grad unter zeitdruck, so dass ich das nich nochmal umschmeissen will :smile:

greets
Geisterkarle