Isolierte Rückreferenzierung von preg_match() mit is_numeric() überprüfen?

l0c4lh05t

Erfahrenes Mitglied
Hi,
gibt es irgendeine Möglichkeit $1, $2, $3 usw. möglichst geschickt auf is_numeric() zu überprüfen und wenn is_numeric(); false ausgibt einen abweichenden ersatz auszugeben?
Soetwas wie
Code:
<?php
$ausgabe = preg_replace("/\[stoopid\](.*?)\[\/stoopid\]/is", if(is_numeric($1)){ "<u>$1</u>" }else{ "<i>$1</i>" }, "[stoopid]Das ist nur ein Beispiel :([/stoopid]");
?>
Leider ist es nicht ganz so einfach :confused:
Hilfe, biiiiiiiiittttttttttttttteeeeeeeeeeeeee :(

Edit: Ich meinte eigentlich preg_replace und nicht preg_match, sorry
 
Zuletzt bearbeitet:
[phpf]preg_match[/phpf] ist wohl nicht ganz die Funktion für deine Zwecke - [phpf]preg_replace[/phpf] mit Evaluation-Marker oder gleich [phpf]preg_replace_callback[/phpf] sollten eher dem entsprechen, was du suchst:
PHP:
<?php
$string = "[stoopid]Das ist nur ein Beispiel :([/stoopid]";
$output = preg_replace_callback(
        "%\[stoopid\](.*)\[/stoopid\]%Uis",
        create_function(
                '$content',
                'return is_numeric( $content[1] ) ? "<u>{$content[1]}</u>" : "<i>{$content[1]}</i>";'
            ),
        $string
    );
var_dump( $output );

Wenn du auf [phpf]preg_match[/phpf] bestehst, gibt die Funktion an sich einen Integerwert zurück (falls Pattern korrekt), der die Anzahl der (Sub)Pattern Matches zurückgibt. Als optionalen, dritten Parameter kannst du jedoch eine Variable angeben, in die sämtliche Treffer übernommen werden. Mit diesem Array kannst du dann weiterarbeiten - Jedoch ist wie gesagt das wohl nicht die Funktionalität, die du hierfür brauchst.
 
Danke für die Antwort
Und sorry, ich meinte eigentlich preg_replace(), die Funktion habe ich auch ausprobiert. Aber danke auch nochmal für den Hinweis, jetzt werde ich darauf achten.
 
Zurück