Seite 2 von 2

Verfasst: 07.02.2007 22:28
von S2B
Xwitz hat geschrieben:

Code: Alles auswählen

$str = preg_replace("/(wort)/i","$1.$lang",$str);
Würde hier ein großes "Wort" zwar gefunden aber durch ein kleines ersetzt werden oder bezieht sich die Backreference auf den im Text gefundenen String?
Ausprobieren, im Moment bin ich mir ehrlich gesagt auch nicht mehr sicher. :oops:

Auf jeden Fall könntest du es dann so lösen, wie es das phpBB mit dem Highlight von Suchwörtern macht:

Code: Alles auswählen

preg_replace('#(' . preg_quote(implode('|', $kurze_woerter), '#') . ')#i', "\1$lang", $text);
Das geht allerdings nur, wenn \1 den gefundenen Begriff mit Groß- und Kleinschreibung enthält.

Verfasst: 07.02.2007 22:44
von Xwitz
Selber testen? Und das schöne Stück Fleisch wegnehmen? Das ist doch fast so schlimm wie google zu benutzen und die Lösung selbst zu finden. :wink: Oder war es Dir zu einfach Ambience?

Code: Alles auswählen

<?php
$str = 'Wer hat das Wort ersetzt?';

$lang = 'rofl';

$str = preg_replace("/(wer)/i","$1$lang",$str); //ohne Punkt nach $1

echo $str;
?>
Gibt "Werrofl hat das Wort ersetzt?" aus. JUCHU

Danke euch beiden.

Verfasst: 07.02.2007 22:49
von S2B
So, und jetzt teste mal "Werbung". :P Sprich: Du musst das ganze noch irgendwie begrenzen, z.B. so, wie ich es vorher gemacht habe:

Code: Alles auswählen

preg_replace("/[^a-zäöüß](wer)[^a-zäöüß]/i","$1$lang",$str);

Verfasst: 07.02.2007 22:58
von Xwitz
S2B hat geschrieben:So, und jetzt teste mal "Werbung". :P
Den Effekt kenne ich schon. Nachteil: erhöhter Speicherbedarf

Macht das [^a-zäöüß] besser [^a-zÄÖÜäöüß] die Sache aber nicht wieder um einiges langsamer? Edit: *gestrichen* /Edit

PS: Was muß man innerhalb von Klassen eigentlich alles escapen?

Verfasst: 07.02.2007 23:22
von S2B
Xwitz hat geschrieben:PS: Was muß man innerhalb von Klassen eigentlich alles escapen?
Was mir spontan einfällt: ], dein Delimiter (Trennsymbol, in diesem Fall #), " bzw. ' (=> wie in einem normalen String). Außerdem darf - imho nur als erstes Zeichen der Klasse stehen, sonst wird es als "bis" interpretiert.