Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] String_replace nur auf ganze Worte anwenden (https://www.delphipraxis.net/141657-%5Bphp%5D-string_replace-nur-auf-ganze-worte-anwenden.html)

TheMiller 13. Okt 2009 13:21


[PHP] String_replace nur auf ganze Worte anwenden
 
Hallo,

hab diesmal eine Frage zu der PHP-Funktion "string_replace". Ich habe ein Array mit Worten, die im String X ersetzt werden sollen. Das funktioniert so gut, dass nicht nur die Worte, sondern - logischerweise - die Zeichenfolge gelöscht wird. Hier mal ein Beispiel für meine schlechte Erklärung:

Zitat:

array-Inhalt: ... Deutsch ...

Original-String: In Deutschland spricht man deutsch

Ergebnis: In land spricht man

Gewünscht: In Deutschland spricht man
Wie kann ich nun der Funktion sagen, dass sie nur Worte beachtet. Oder muss ich den String in ein Array teilen und die Worte aus dem Wort-Array löschen und den String dann wieder zusammenbasteln...?

Danke

Namenloser 13. Okt 2009 13:36

Re: [PHP] String_replace nur auf ganze Worte anwenden
 
Du könntest es mit preg_replace() machen.
Code:
$s = preg_replace('/(\W)(Haus)(\W)/','$1Baum$3', $s);
Wenn du an das Pattern hinter dem letzten Schrägstrich ein i anhängst, arbeitet die Funktion case-insensitiv.

TheMiller 13. Okt 2009 13:43

Re: [PHP] String_replace nur auf ganze Worte anwenden
 
Gut, dass müsste ich dann für jeden Array-Eintrag machen. Müsste ich bei str_replace aber auch. Was ist denn zu empfehlen? Also, von der GEschindigkeit. AUf die kommt es hier nämlich ganz dramatisch an....

Namenloser 13. Okt 2009 13:45

Re: [PHP] String_replace nur auf ganze Worte anwenden
 
Zitat:

Zitat von DJ-SPM
Gut, dass müsste ich dann für jeden Array-Eintrag machen.

Du kannst beiden Funktionen direkt Arrays als Parameter übergeben. Ob sich das auf die Geschwindigkeit auswirkt, weiß ich nicht.

Valle 13. Okt 2009 13:51

Re: [PHP] String_replace nur auf ganze Worte anwenden
 
Zitat:

Zitat von DJ-SPM
Gut, dass müsste ich dann für jeden Array-Eintrag machen. Müsste ich bei str_replace aber auch. Was ist denn zu empfehlen? Also, von der GEschindigkeit. AUf die kommt es hier nämlich ganz dramatisch an....

Dann rate ich von Regular Expressions schon mal ab. :mrgreen:

Kannst du uns vielleicht etwas genauer beschreiben wozu du das brauchst? Soll das eine Art multilanguage-Modul für eine Webanwendung werden? Wie oft soll der Code ausgeführt werden? (Insgesamt nur ein mal / Bei der Installation / Jeden Monat / Bei jedem Request / ...)

Liebe Grüße,
Valle

TheMiller 13. Okt 2009 13:56

Re: [PHP] String_replace nur auf ganze Worte anwenden
 
Ich benutze die Funktion, um einen Filter zu erstellen. Ich möchte zwei Strings miteinander vergleichen. Prinzipiell sind beide String sowieso gleich. Nur bei dem einen String sind noch zusätzliche, irrelevante Infos mit drin, die ich rauslöschen möchte um so eine 100%-Übereinstimmung zu erhalten.

Ich werde es so machen, beide Strings in der gefilterten und ungefilterten Version in der Datenbank abzulegen. So wird der Filter nur einmal angewendet und dann nur noch mit JOINS gesucht. Die Suchabfragen werden nur einmalig ausgeführt, da diese Seiten gecached sind.

Also bleibe ich bei str_replace und wende meine Idee an, die ich im 1. Post schon hatte.

Oder spricht was dagegen?

Valle 13. Okt 2009 14:02

Re: [PHP] String_replace nur auf ganze Worte anwenden
 
Zitat:

Zitat von DJ-SPM
[...] Oder spricht was dagegen?

Also von PHP-Seite her nicht. :mrgreen: Es stellt sich vor allem die Frage, wie viele Datensätze das wohl sind. Wenn es wohl mehrere Milliarden Datensätze sind, dann sollte man da vielleicht doch nochmal drüber nachdenken die Sache anders anzugehen. Bei einigen wenigen Tausend hingegen ist dein Lösungsansatz denke ich am performantesten - zumindest soweit ich das auf so abstrakter Ebene beurteilen kann. ("Prinzipiell gleich, aber einer enthält mehr Infos" widerspricht sich meiner Meinung nach ein wenig. :stupid: )

Liebe Grüße,
Valle

TheMiller 13. Okt 2009 14:11

Re: [PHP] String_replace nur auf ganze Worte anwenden
 
Ja, ich glaube nicht, dass wir über über einige tausend Einträge nicht drüber kommen, da unsere Daten abhängig von deren Erscheinung sind.

In diesem Fall gibt es keinen Widerspruch, denn die "Infos" sind keine Infos, sondern nur Teilstrings, die in dem eigentlichen String rein garnichts zu suchen haben ;)

Dann bedanke ich mich mal wieder und bastel weiter...;)

Namenloser 13. Okt 2009 14:12

Re: [PHP] String_replace nur auf ganze Worte anwenden
 
Zitat:

Zitat von Valle
Zitat:

Zitat von DJ-SPM
Gut, dass müsste ich dann für jeden Array-Eintrag machen. Müsste ich bei str_replace aber auch. Was ist denn zu empfehlen? Also, von der GEschindigkeit. AUf die kommt es hier nämlich ganz dramatisch an....

Dann rate ich von Regular Expressions schon mal ab. :mrgreen:

So langsam sind die nun auch wieder nicht... vor allem nicht, bei so einfachen wie der von mir genannten. Wahrscheinlich läuft es sogar schneller als irgendeine selbst zusammengefrickelte Funktion, da preg_replace als PHP-eigene Funktion wahrscheinlich schon direkt als ausführbarer Code vorliegt und nicht erst interpretiert werden muss.

Valle 13. Okt 2009 14:22

Re: [PHP] String_replace nur auf ganze Worte anwenden
 
Zitat:

Zitat von NamenLozer
So langsam sind die nun auch wieder nicht... vor allem nicht, bei so einfachen wie der von mir genannten. Wahrscheinlich läuft es sogar schneller als irgendeine selbst zusammengefrickelte Funktion, da preg_replace als PHP-eigene Funktion wahrscheinlich schon direkt als ausführbarer Code vorliegt und nicht erst interpretiert werden muss.

Das kommt eben auf die selbst geschriebene PHP-Funktion an. Ich habe schon sehr viele PHP Benchmarks gemacht (Xdebug :love: ) und bisher waren die Regulären Ausdrücke auch in der einfachen Form immer ganz weit oben mit dabei. Ich will ja auch nicht allgemein davon abraten, aber wenn der TE schon schreibt "auf die kommt es ganz dramatisch an", dann kann man das schon mal erwähnen. Wobei bei der beschriebenen Dramatischkeit Dramatik wahrscheinlich PHP schon die falsche Wahl ist *fg*. :zwinker:

Liebe Grüße,
Valle


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz