AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [PHP] String_replace nur auf ganze Worte anwenden
Thema durchsuchen
Ansicht
Themen-Optionen

[PHP] String_replace nur auf ganze Worte anwenden

Ein Thema von TheMiller · begonnen am 13. Okt 2009 · letzter Beitrag vom 13. Okt 2009
Antwort Antwort
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#1

[PHP] String_replace nur auf ganze Worte anwenden

  Alt 13. Okt 2009, 14:21
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
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

Re: [PHP] String_replace nur auf ganze Worte anwenden

  Alt 13. Okt 2009, 14:36
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.
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#3

Re: [PHP] String_replace nur auf ganze Worte anwenden

  Alt 13. Okt 2009, 14:43
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....
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#4

Re: [PHP] String_replace nur auf ganze Worte anwenden

  Alt 13. Okt 2009, 14:45
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.
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#5

Re: [PHP] String_replace nur auf ganze Worte anwenden

  Alt 13. Okt 2009, 14:51
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.

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
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#6

Re: [PHP] String_replace nur auf ganze Worte anwenden

  Alt 13. Okt 2009, 14:56
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?
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#7

Re: [PHP] String_replace nur auf ganze Worte anwenden

  Alt 13. Okt 2009, 15:02
Zitat von DJ-SPM:
[...] Oder spricht was dagegen?
Also von PHP-Seite her nicht. 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. )

Liebe Grüße,
Valle
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#8

Re: [PHP] String_replace nur auf ganze Worte anwenden

  Alt 13. Okt 2009, 15:11
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...
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#9

Re: [PHP] String_replace nur auf ganze Worte anwenden

  Alt 13. Okt 2009, 15:12
Zitat von Valle:
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.
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.
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#10

Re: [PHP] String_replace nur auf ganze Worte anwenden

  Alt 13. Okt 2009, 15:22
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 ) 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*.

Liebe Grüße,
Valle
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz