Suchmuster erstellen

Eurocid

Mitglied
Guten Abend

Ich habe mir vor kurzem eine Funktion in PHP erstellt welche mit bestimmte Wörter mit span Tags versieht, das sieht so aus:

PHP:
$suchmuster[1] = '/games/i';
$ersetzungen[1] = '<span class="x" style="color: #B11C1C;">Games</span>';
$newtext =  preg_replace($suchmuster, $ersetzungen, $where);

Ich hab mich schon auf diversen Seiten umgesehen, was es alles für Suchmuster gibt, leider sind die sehr verwirrend. :(
Zumindest für mich.

Folgende Frage:

Ich habe z.B. einen Satz wie diesen:

1394 Feets erreichte Tom bei JumpGame

Jetzt will ich "1394 Feets" in einen span Tag setzten, aber die Zahl ändert sich immer und sind auch nicht immer gleich viele Stellen.

Kann mir wer so ein Suchmuster schicken, und vielleicht eine kleine Erklärung dazu.


Danke im voraus
Cid
 
Huhu!

Keine Garantie für 100%-ige Funktion, da schon spät aber hier mal ein kleiner Lösungsansatz, der evtl. von den Profis noch optimiert werden kann, aber für Dein Beispiel funktionieren sollte.

PHP:
<?php 
$string = '1394 Feets erreichte Tom bei JumpGame'; 
$regex = '/([0-9]+)\s(\w+)/';
preg_match($regex, $string, $result);
print_r($result);
$replace = '<span class="x" style="color: #B11C1C">'.$result{0}.'</span>'; 
$newString = preg_replace ($regex, $replace, $string, -1, $preg_replace_found ); 
print_r($newString) ;
?>

vg,
toby
 
Extra ein neuer Post dafür:

Schau Dir mal das Thema "Reguläre Ausdrücke" bzw. "Regular Expressions" an. Der Einstieg ist nicht ganz so einfach aber mit jeder Verwendung wirst Du mit der sog. Regex-Syntax ein Stück vertrauter. Tutorials, Anleitungen und dergleichen wirft Dir jede Anfrage an eine Suchmaschine zu Hauf zurück.

Schau auch nochmal hier im Forum genauer nach. Ähnliche Themen werden Dir ja bei Betrachtung eines Threads(Themas) im unteren Bereich vorgeschlagen.

vg,
toby
 
Guten Morgen

Danke SirToby für deine Antworten, ich habe mir solche Tutorials schon durchgesehen, und ich habe eigentlich auch den RegEx schon relativ gut beisammen.

RegEx:
PHP:
/[0-9]{1,}[ Feets]/

Leider weis ich nicht wie der gefundene String wieder in einen normalen Text umgewandelt wird ?
Ich denke hier gibt es bestimmt eine besser Lösung. Das Ergebnis hierbei wäre wie folgt:

/[0-9]{1,}[ Feets]/Feets erreichte Spieler1 bei JumpGame

Und ausgeben sollte er aber

### Feets erreichte Spieler1 bei JumpGame

Also er soll mir die erreichten Feets mit der gesammten Zahl in einen Tag setzen:

PHP:
// Zahlen suchen
    $suchzahlen = '/[0-9]{1,}[ Feets]/';
    $neuezahlen = '<span class="x" style="color: red;">' . $suchzahlen . '</span>';
    $where =  preg_replace($suchzahlen, $neuezahlen, $where);

Gibt es da nicht vielleicht schon eine fertige Funktion? Ich arbeite auch mit jQuery wenn es da Möglichkeiten gibt.

Grüße
Cid
 
Hoi!

So ganz verstehe ich glaube ich nicht mehr, was Du möchtest, vermute aber ganz leicht, dass Dich der Rückgabewert der
PHP:
preg_match()
-Funktion irritiert, der nämlich nur 1 oder 0 zurückliefert; dankbarer Weise jedoch zusätzlich den Suchwert, wenn die Rückgabe true (1) ist.

Hier noch mal eine leicht veränderte Version des Regex-Pattern, wo preg_match() nur ein Single-Element-Array in $result speichert, was dann im Anschluss in den </span>-Tag eingebunden wird.

Dein Regex-Pattern liefert bei diesem Beispiel die erreichten Feets zurück, aber nicht den Begriff an sich.

Habe absichtlich den Integer-Wert der erreichten Feets und den Begriff Feets geändert ;) und suche nach einer oder mehreren numerischen Werten [0-9]+, gefolgt von einem Leerzeichen \s und weiter gefolgt von einem oder mehreren Buchstaben und Zeichen \w+
PHP:
$string = '139123544 Feeeets erreichte Fritzi Foppel die Forelle bei JumpGame'; 
$regex = '/[0-9]+\s\w+/';
preg_match($regex, $string, $result);
$spanString = '<span class="x" style="color: #B11C1C; font-weight: bold;">'.implode('', $result).'</span>';
print_r(preg_replace ($regex, $spanString, $string)) ;
--> vgl. http://www.pixel9.de/test.php
 
Hallo wiedermal

Danke für deine Antwort, so funktionierts vom feinsten. :)

Ja das mit den Funktionen preg_match und preg_replace, und ihren Rückgabe Werten hab ich noch immer nicht richtig verstanden. :(
Aber da wird ich mich noch mal reinschaun.

Jetzt nur vom Verständnis her:
Warum hast du die Strings mit implode verbunden ?
Kann ich das nicht einfach mit $result[0] ausgeben, oder entsteht da ein Problem ?

Danke für deine Mühe, nochmal. ;)
 
Zunächst einmal gern geschehen; freue mich immer, wenn ich helfen kann. :)

Die
PHP:
implode();
Funktion - in der Objekt orientierten Programmierung: Methode - fügt die Einzelelemente eines Arrays anhand eines gegebenen Trennzeichens in einem einzelnen String zusammen.

So würde zB.
PHP:
$dasIstEinArray = ("PHP", "C#", "SQL", "ASP");
$implodeString = implode(" und ", $dasIstEinArray);
Code:
PHP und C# und SQL und ASP
ausgeben.

Du kannst sicherlich auch
PHP:
$result{0}
ausgeben, jedoch fällt bei meiner Variante der Zugriff auf ein spezifisches Element des erzeugten String-Arrays weg, obgleich das Array in diesem Fall nur ein Element an der Stelle {0} besitzt.
 
Zurück