preg_replace -
Helmuth
- php
Hallo liebe Leute,
ich habe folgendes Problem. Ich habe ein preg_replace mit mehreren Werten, die ersetzt werden sollen. In meinem Beispiel nehme ich nur zwei Wörter, es können aber wesentlich mehr sein.
Und hier das Beispiel:
<?
$text = "In der Sonne wächst die Sonnenblume am besten.";
echo preg_replace( '/(.*)(sonne|sonnenblume)(.*)/isUm', '\1<b>\2</b>\3', $text );
?>
Es wird leider nur "sonne" in bold ausgegeben AUCH bei "Sonnenblume" ebenefalls nur "sonne".
Wenn ich es umdrehe funkt es einwandfrei:
echo preg_replace( '/(.*)(sonnenblume|sonne)(.*)/isUm', '\1<b>\2</b>\3', $text );
Da ich aber keinen Einfluss auf die Reihenfolhe habe weiss ich nicht weiter!?
Was mache ich falsch?
Helmuth
Hallo, Helmuth!
Wenn Du exakt nach Sonnenblume oder Sonne suchen willst, muss vor und nach dem Wort mindestens ein nicht alphanumerisches Zeichen kommen, also
'/(\W)(Wort1|Wort2|Wort3|...)(\W)/isUM'
Gruß, LX
Hallo LX, das ist schon fast was ich brauche.
$text = "In der Sonne wächst die Sonnenblume am besten. Sonnen macht die Haut schön braun.";
echo preg_replace( '/(\W)(sonne|sonnenblume)(\W)/isUm', '\1<b>\2</b>\3', $text ); ?>
Jetzt fehlt nur noch, dass "[b lang=html]Sonne[/b]n" auch gefettet wird.
Helmuth
Das geht so nicht. Entweder ganze Wörter oder Du musst eine Funktion schreiben, welche Dir die Wortliste entsprechend sortiert.
Gruß, LX
Das ist ja das Problem. Eine Sortierung ist nicht ohne weiteres möglich. Es geht um eine Blacklist, die ich über einen Text laufen lassen muss.
Hast du einen Ansatz für mich!?
Gruß, Helmuth
Hallo,
Das ist ja das Problem. Eine Sortierung ist nicht ohne weiteres möglich. Es geht um eine Blacklist, die ich über einen Text laufen lassen muss.
warum kann diese Blacklist nicht sortiert werden?
Freundliche Grüße
Vinzenz
Ich kann schon sortieren, bringt mich aber leider nicht weiter.
Beispiel:
$text = "In der Sonne wächst die Sonnenblume am besten. Sonnen macht die Haut schön braun. Sonnenhut macht sonne Freude!";
echo preg_replace( '/(\W)(sonne|sonnenblume)(\W)/isUm', '\1<b>\2</b>\3', $text ); ?>
Der Text sollte hinterher so aussehen:
In der SONNE wächst die SONNENBLUME am besten. SONNEn macht die Haut schön braun. SONNEnhut macht SONNE Freude!
Da ist die Sortierung egal.
Gruß
Helmuth
Hi,
Ich kann schon sortieren, bringt mich aber leider nicht weiter.
dann sortierst Du falsch.
Der Text sollte hinterher so aussehen:
In der SONNE wächst die SONNENBLUME am besten. SONNEn macht die Haut schön braun. SONNEnhut macht SONNE Freude!Da ist die Sortierung egal.
Nein, ist sie nicht.
Cheatah
Hallo,
Beispiel:
$text = "In der Sonne wächst die Sonnenblume am besten. Sonnen macht die Haut schön braun. Sonnenhut macht sonne Freude!";
Der Text sollte hinterher so aussehen:
In der SONNE wächst die SONNENBLUME am besten. SONNEn macht die Haut schön braun. SONNEnhut macht SONNE Freude!
das sieht für mich so aus, als wären Wortgrenzen *nicht* relevant, z.B. lese ich daraus, dass aus
Höhensonneneinfluss
HöhenSONNEneinfluss
werden sollte. Infolgedessen ist die Voraussetzung für Wortgrenzen nicht gegeben - also tritt der oder-Fall aus diesem Beitrag von LX ein.
Freundliche Grüße
Vinzenz
Hi,
In meinem Beispiel nehme ich nur zwei Wörter, es können aber wesentlich mehr sein.
es sind aber in jedem Fall Wörter, richtig?
Da ich aber keinen Einfluss auf die Reihenfolhe habe weiss ich nicht weiter!?
Das Pattern für Wortgrenze lautet \b.
Cheatah