[REGEX] Spielfarben parsen

Remizz

Mitglied
Guten Morgen! ;-)

Ich benötige dringenst Hilfe bei meinem kleinen regex Problem. Bin noch ziemlich neu in regex und steige deshalb noch nicht überall durch.

Es geht um das Auslesen eines Serverlogs von meinem Gameserver. Wie einigen vielleicht bekannt ist kann man in der Quake Engine farbige Namen annehmen.

Diese will ich nun in HTML umsetzen.

Habe folgendes probiert:

PHP:
        $str = preg_replace('=\^1(.*)$=Uis', '<font color="#FF0000">$1</font>', $str);

Das klappt auch wunderbar, allerdings nur so lange bis der Fall ^1^1 eintritt. Dann zeigt er mir das Zweite an (in rot).

Das Beispiel ist ^1^1Nam^1^1e.

Hoffe ihr könnt mir helfen.

MfG
 
Könntest du bitte ein wenig auf jenes eingehen:

^1^1Nam^1^1e

...wie ist es prinzipiell aufgebaut, und was soll daraus werden?(ich bin nicht so der Zocker:-) )
 
Genau so ist es.

Es gibt allerdings ein Problem. Viele benutzen Namen wie etwa ^^11Name, damit der Name auch bei Abschüssen farbig angezeigt wird, das mag mein regex aber nicht, deshalb das Problem.

Das Spiel erkennt nur den mittleren Teil, also das ^1. Ist dies jedoch umgewandelt, steht dort erneut ein ^1, nur dass die 1 rot ist. Wird man nun getötet, erkennt das spiel erneut die Farben und findet dieses letzte ^1 und wandelt es noch einmal um.

MfG
 
Zuletzt bearbeitet:
^1^1Nam^1^1e ergibt einfach nur einen roten namen. Eigentlich komplett sinnfrei das so zu schreiben, aber ich brauche das halt auch im Regex.

Danke für den regex Gumbo, klappt alerdings nicht.

Es kommt folgendes dabei raus:

Anfang: ^1Santa^3Klaus
Ende: 1Santa3Klaus

Zudem hab ich noch das Problem, dass ich für jedes der ^[1-9] nen eigenen <font color= machen muss. Deshalb funktioniert alles in einem nicht.
 
Also „^1^1Nam^1^1e“ wird mithile meines (nun erweiterten) Regulären Ausdrucks rot dargestellt.
PHP:
function replaceQuakeColorCode($string)
{
	$colors = array(
		1 => 'red',
		2 => 'green',
		3 => 'yellow',
		4 => 'blue',
		5 => 'aqua',
		6 => 'purple',
		7 => 'white'
	);
	return preg_replace('/(?:\x5E([1-7]))+([^\x5E]+)/e', '"<span style=\"color:".$colors[\1]."\">\2</span>"', $string);
}
 
Ja! Super vielen dank! Das funktioniert ohne Probleme. Jetzt mach ich mich dran und zerlege mir noch den regex damit ich ihn auch verstehe :)

Vielen dank!
 
Dabei kann ich dir helfen.
Code:
(?:\x5E([1-7]))+([^\x5E]+)
Das „\x5E([1-7])“ ist die hexadezimale Darstellung des Zirkumflexzeichens gefolgt von einer Zeichenklasse für die Zahlen eins bis sieben. Diesen Ausdruck noch einmal gruppiert und mit einem „+“ multipliziert, sorgt in Verbindung mit dem direkt nachfolgenden „([^\x5E]+)“ dafür, dass bei direkt aufeinanderfolgenden Farbcodes jeweils nur der letzte genommen wird.
 
Zurück