[regex] hex zahl suchen

uhu01

Erfahrenes Mitglied
Hy!

Ich wollte gestern eine Seite programmieren, die die Trackmania-Nations Ergebnisse ausgibt. Dafür muss ich die Namen der Spieler nach bestimmten Strings durchsuchen, die Trackmania zu färben der Usernamen benutzt.

Ein Username sieht z.B. so aus: $fffuhu$0f001
Das währe uhu01, wobei uhu in weiss geschrieben wird, sowie 01grün geschrieben wird.

Die Farben werden mit einem $ am Beginn geschrieben, dann kommt eine 3-Stellen hex-Zahl.

Der Code mit dem Ich die Farben-Strings suchen wollte, sieht vereinfacht auf das Problem so aus:
Code:
<?php

$pattern = array( '/\$[a-f0-9]{3}/');
$subject = "$fffuhu$0f001";


preg_match_all($pattern[0], $subject, $matches, PREG_OFFSET_CAPTURE);
print_r( $matches);

?>

Folgende Ausgabe bekomme ich:
Code:
Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => $0f0
                    [1] => 0
                )

        )
)
Erwartet hätte ich allerdings:
Code:
Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => $fff
                    [1] => 1
                )

        )
    [1] => Array
        (
            [0] => Array
                (
                    [0] => $0f0
                    [1] => 1
                )

        )
)
Wo liegt der fehler in meinem Regex?

mfg
uhu01
 
Probier mal Folgendes:
PHP:
<?php

	function foobar( $colorHex, $string )
	{
		return '<span style="color:#'.$colorHex.'">'.$string.'</span>';
	}

	$subject = '$fffuhu$0f001';
	echo preg_replace('/\$([a-f0-9]{3})([^$]+)/e', 'foobar("\1", "\2")', $subject);

?>
 
Hy!

Danke für den Code erstmal,aber:

Warum findet mein Regex keine Vorkommnisse von diesen hex-Zahlen, wenn die Hex-Zahl mit [a-f] beginnt?

Das Problem ist, dass es nicht nur Farben, sondern auch Formatierungen wie kursiv oder fett, sowie "alle Formatierungen beenden" gibt. Daher das Suchen, welches bei mir eben nicht funktioniert.

mfg
uhu01
 
Code:
$subject = "$fffuhu$0f001";

Bei deinen Script kann er hier nicht finden.
Dazu musste dein Textstring auch in einfache Anführungszeichen setzen !
Sonst wird das als PHP-Variable interpretiert :-)
 
Zurück