Komplexeres Regex Problem

Katzenbauer

Erfahrenes Mitglied
Ok ich habe folgendes Problem.

Ich habe eine Funktion geschrieben die einen Text der zwischen einem bestimmten Tag, nenen wir es [xy] und schließend [/xy], ersetzt. Also diese Funktion erwartet was zwischen den Tags steht und gibt den umgewandelten Text zurück.

Nun möchte ich den gesamten Text, wo das Tag mehrmals drin vorkommen kann, eingeben und die Stellen wo das [xy]blabla[/xy] durch den umgewandelten Text(logischerweise ohne die Tags) ersetzt haben.

Ich habe mir gedacht da kann man eventuell etwas mit preg_replace_callback() machen, aber die Funktion verhält sich nicht wie iches erwarte und aus der Doku zu der Funktion werde ich auch nicht schlau. Ich hab auch schon versucht mir mit einer Schleife selber was zusammen zu bauen, jedoch klappt das alles nicht (Regex nub:mad:).
 
Hmm nett wäres es, wenn du uns sagen könntest, wie sich die Funkion, bei dir verhält nen kleiner Snibbel wär nett!
 
So ich hab das jetzt mal mit dem e Modifikator versucht:

PHP:
function parseText($string)
{
    // KB-Tag
    preg_replace('/\[kb\](.+?)\[\/kb\]/ise', 'parseKB(\\1)', $string);
}
Bekomme aber folgendes zurück:

Parse error: syntax error, unexpected ':' in C:\Programme\xampp\htdocs\kolotool\include\functions.php(268) : regexp code on line 1

Fatal error: preg_replace(): Failed evaluating code: parseKB(Aktion: Angriff 08.02.2006 05:17:18 Von: AlphaWolf\'s Babylon (65:30:2) Nach: unbesetzt (65:20:12) Oase erobert! Vor dem Kampf Angreifer Verteidiger Granatwerfer 68 0 Spähpanzer 7 0 Schützenpanzer 13 0 Kampfpanzer 36 0 Kommandotruck 1 0 Verluste Angreifer Verteidiger Granatwerfer 0 0 Spähpanzer 0 0 Schützenpanzer 0 0 Kampfpanzer 0 0 Kommandotruck 1 0) in C:\Programme\xampp\htdocs\kolotool\include\functions.php on line 268

Zeile 268 ist die oben im Code zusehende mit preg_replace. Wenn ich um \\1 im Aufruf noch doublequotes mache, dann gibt er gar nix aus (also alles leer).

Die KB-Tags kann ich ja noch später entfernen erstmal muss er das dazwischen richtig parsen (Es scheint also ob das richtige übergeben wird).
 
Probier mal folgende Funktion:
PHP:
function parseText($string)
{
	// KB-Tag
	return preg_replace('(\[kb\](.+?)\[\/kb\]/ise', 'parseKB("\1")', $string);
}
 
Zurück