Autor |
Nachricht |
graphicsandunity
Threadersteller
Dabei seit: 22.11.2004
Ort: Berlin
Alter: 40
Geschlecht:
|
Verfasst Do 10.02.2005 21:09
Titel PHP: Einen String nach einem festen Substring durchsuchen |
|
|
Hallo Forum,
der Titel klingt zwar danach, als ob ich nicht gesucht hätte. Dem ist nicht so aber ich nutze das mal als Vorteil aus.
Also mein Problem ist folgendes:
Ich möchte eine Eingabe eines Users nach einer ganz bestimmten Zeichenkette durchsuchen.
Und zwar nach genau dieser.
Hier ein Beispiel, wie ich das meine:
Sagen wir ich habe eine User-Eingabe
Code: |
$eingabe = "Ich bin vielleicht doof."
|
Nun will ich nach dem Wort viel suchen
Code: |
$suche = eregi ('viel', $eingabe);
|
Dabei wird verständlicherweise true draus, weil ja das Wort "viel" in "vielleicht" drin steckt.
Das ist aber nicht das was ich will. Ich will genau das Wort "viel" und es nicht als Wortteil aus einem größeren Wort.
Ich hab das auch schon mit den String-Funktionen von PHP versucht. Ist aber genau das selbe bei raus gekommen.
Gibt es einen Weg das zu lösen?
Wichtig ist natürlich, dass der ganze spaß auch das gesuchte Teilwort in der Mitte und am Ende eines größeren Strings ausschließt.
Hoffe es war alles verständlich und nich zu verquer.
Erstmal Danke
GaU
|
|
|
|
|
gtz
Dabei seit: 15.04.2002
Ort: -
Alter: 48
Geschlecht:
|
Verfasst Do 10.02.2005 21:14
Titel
|
|
|
du willst uns wohl verarschen?
pack bei deinem regexp noch alle moglichen whitespace- und satzzeichen außen rum und gut is. daskann doch so schwer echt nich sein?
|
|
|
|
|
Anzeige
|
|
|
graphicsandunity
Threadersteller
Dabei seit: 22.11.2004
Ort: Berlin
Alter: 40
Geschlecht:
|
Verfasst Do 10.02.2005 21:17
Titel
|
|
|
Ich bitte vielmals um Verzeihung der Herr. Ich bin nicht so bewandert mit der Regex-Engine.
Da hab ich noch nicht ganz durchgeblickt.
Also müssen die Sonder- und das Leerzeichen einmal vorne und einmal hinten ran, wen ich das richtig verstanden hab?
Zuletzt bearbeitet von graphicsandunity am Do 10.02.2005 23:30, insgesamt 1-mal bearbeitet
|
|
|
|
|
gtz
Dabei seit: 15.04.2002
Ort: -
Alter: 48
Geschlecht:
|
Verfasst Do 10.02.2005 21:21
Titel
|
|
|
oder dir da smal anzulesen mit den regexp kommst du auf keinen grünen zweig damit.
prinzipiell so:
Code: |
((eines der möglichen wort-grenz-zeichen)beliebig oft)viel((eines der möglichen wort-grenz-zeichen)beliebig oft)
|
|
|
|
|
|
graphicsandunity
Threadersteller
Dabei seit: 22.11.2004
Ort: Berlin
Alter: 40
Geschlecht:
|
Verfasst Do 10.02.2005 21:27
Titel
|
|
|
Ach sooo.
Alles klar.
Das ist ja simpel. Da hab ich wohl wieder zu komplex gedacht. *schäm*
Ich hab ja die ganzen O'Reilly-Bücher über PHP. Und das was ich hier wollte war wohl zu einfach. lol
Ich bin immer am Verständnis einer "validen" E-Mail-Adresse gescheitert. Das verwirrt mich jedes mal ganz und gar.
Muss ich wohl noch eine Reihe von Beispielen für die Suchmuster sehen und verstehen.
Danke für die Hilfe.
|
|
|
|
|
Account gelöscht
Ort: -
Alter: -
|
Verfasst Do 10.02.2005 23:19
Titel
|
|
|
Pass aber mit dem Semikolon auf, et jibt ja auch noch Entities....
|
|
|
|
|
graphicsandunity
Threadersteller
Dabei seit: 22.11.2004
Ort: Berlin
Alter: 40
Geschlecht:
|
Verfasst Fr 11.02.2005 00:32
Titel
|
|
|
Also ich hab das jetzt so versucht aber das funzt nicht:
Code: |
preg_match ('/[ ,.!?-]{1,}?'.$mein_array[$i].'[ ,.!?-]{1,}?/', $eingabe);
|
Ich hab eine Liste mit Zeichenketten, die in $eingabe gesucht werden sollen.
Also ich hab preg_match() genommen, weil es ja damit schneller gehen soll.
Nun frage ich mich nur, wo der Fehler is.
Ich verstehe, das was ich da geschrieben hab so:
erst wird nach einem der Interpunktionszeichen gesucht, wenn gefunden, dann nach dem Array-Element gucken und wenn das da is, wieder nach einem der Interpunktionszeichen suchen.
Wo is da der Denkfehler?
Hoffe ich blick irgendwann in naher Zukunft bei diesen Mustern durch. *flenn*
Zuletzt bearbeitet von graphicsandunity am Fr 11.02.2005 00:33, insgesamt 1-mal bearbeitet
|
|
|
|
|
Account gelöscht
Ort: -
Alter: -
|
Verfasst Fr 11.02.2005 01:02
Titel
|
|
|
der Punkt "." ist ein Sonderzeichen (steht für EIN beliebiges Zeichen) => muss escaped werden. Genauso wie das "?".
Aber so wie du das machst, wirst du NICHT zum Ziel kommen. Warum? Du willst deine Suchergebnisse mit dem "?" wieder auf 0 oder 1 Vorkommen reduzieren. Damit bist du wieder da, wo du vorher auch warst.
StrickLiesel.
Du musst also reguläre Wortgrenzen beachten:
$pattern = "/[ ,\.!\?]DeinWort[ ,\.!\?-]/";
Und dann noch den Satzanfang und das Satzende berücksichtigen. Vielleicht kannst du das Satzende und den Anfang auch in einem ersten Schritt maskieren, indem du irgend ein Zeichen oder eine Kombination davor und dahinter hängst. Damit hättest du zusätzlich zur Menge [ ,\.!\?] einen eindeutigen Bezeichner.
Wer ne bessere Lösung weiß: Her damit!!!!
Zuletzt bearbeitet von am Fr 11.02.2005 01:04, insgesamt 1-mal bearbeitet
|
|
|
|
|
|
|
|
Ähnliche Themen |
PHP String nach fast variablen Teilstring durchsuchen
RegExp String zwischen 2 Zeichen in einem String entfernen
Text sinnvoll kürzen mit „substring()”
Festen Footer erzeugen
OS X | CSV Dateien durchsuchen
Diesen Mac durchsuchen!
|
|