Regulärer Ausdruck - Wortbegrenzung

bodo2005

Lt. Junior Grade
Registriert
Okt. 2005
Beiträge
333
Hallo,
ich würde gerne bestimmte Wörter hervorheben mit Hilfe von preg_replace. Leider weiß ich nicht, wie ich ein Wort begrenzen kann.

D.h. es soll $(.*?) ersetzt werden mit einer Farbe (span style), leider weiß ich nicht, wie ich festlegen kann, dass wann dieses Wort (hier Variable) unterbrochen wird z.B. durch ein Leerzeichen oder sonstiges eben das Gesuchte endet. :)

Weiß da jemand Rat?
 
Ich verstehe nicht ganz, denn wenn du nur bestimmte Wörter (also strings) in einem Text (wieder ein String) ersetzen willst, dann benutze die...
PHP:
str_replace(string needle, string replace, string haystack);
//usage:
$neuer_string = str_replace('DasHervorzuhebendeWort', '<span style="color:yellow">DasHervorzuhebendeWort</span>', $alter_string);
...Funktion und ersetze das Wort mit dem Gleichenwort in einem <span> tag.
Wenn du die Wörter in einem Array Gespeichert hast, dann kannst du den Text mit einer foreach-Schleife durchlaufen:
PHP:
$worterarray = ('wort1', 'wort2');
$text = 'hier ist das Wort1 und das Wort2';

foreach ($worterarray as $wort) {
   $text = str_replace($wort, '<span style="color:yellow">'.$wort.'</span', $text);
}

//müsste jetzt eigentlich die beiden Wörter Wort1 und Wort2 hervorgehoben haben.
echo $text;
Script Not Tested

http://de.php.net/str_replace
 
Er möchte wohl, dass wenn "klein" gesucht wird, das ganze Wort, das "klein" enthält, markiert wird. Zum Beispiel "Zicklein" oder so.

Das Pattern dazu lautet dann wohl so:
PHP:
$pattern = "#([^\s]*".trim($suchwort)."[^\s]*)#is";
Erklärung: \s steht für beliebige Whitespace-Zeichen (bestes Beispiel ist ein Leerzeichen), welche durch das vorangestellte Zeichen ^ (Zirkumflex) nicht vorkommen dürfen. Das heißt also, dass vor und nach dem eigentlichen Suchbegriff beliebig viele Zeichen, die kein Leerzeichen sind, vorkommen dürfen, aber nicht müssen.

Dies ersetzt man dann auf folgende Weise:
PHP:
$text = preg_replace ( $pattern, "<span style=\"font-weight: bold; color: #f90;\">\\1</span>", $text);


PS: Diese Accesskeys in ForumBase sind das Schlimmste, was mir in einem Forum bisher untergekommen ist. Das nervt beim Editieren.
 
Zuletzt bearbeitet:
Ich würde es mit str_replace lösen, falls es wirklich nur einzelne Wörter sind du ersetzen willst.

PS: Die Access-Keys sind unglaublich geil - und ist fast in jedem guten Forum so :)
 
Was mich an den Accesskeys stört, ist, dass man vor allem bei Quelltexteingabe Probleme bekommt. Ich tippe ziemlich schnell und da kann es vorkommen, dass ich nach einem StrgAlt-Zeichen (eckige Klammern o.ä.) immer noch auf Strg+Alt hänge, während ich das nächste Zeichen (z.B. ein s) eintippe. Dann wird aber irgend ein Accesskey aktiviert, was ich gar nicht wollte. Man sollte dies ein- oder ausschalten können.
 
Zurück
Oben