Wort in Text finden
Michael
- php
Hallo
ich möchte bestimmte Worte in Text finden und unterstreichen. Diese Worte können überall im Text stehen. Dazu habe ich bis jetzt diese Regex: "/(^| )".$wort."( |$)/i"
Jetzt kann der Benutzer auch ein * als Wildcard angeben, das soviel bedeuten soll wie es dürfen beliebig viele Zeichen stehen, auch keines, aber kein Leerzeichen. Dazu ersetze ich den * momentan mit .? aber das klappt leider nicht sehr gut. Es wäre toll, wenn mir da jemand weiterhelfen könnte, da ich noch Regex Anfänger bin.
Danke und gruß Michael
Hi,
ich möchte bestimmte Worte in Text finden und unterstreichen. Diese Worte können überall im Text stehen. Dazu habe ich bis jetzt diese Regex: "/(^| )".$wort."( |$)/i"
es existiert ein Pattern für Wortgrenze (word boundary).
Dazu ersetze ich den * momentan mit .? aber das klappt leider nicht sehr gut.
Was bedeutet ".?", und was möchtest Du eigentlich haben?
Cheatah
Hi,
ich möchte bestimmte Worte in Text finden und unterstreichen. Diese Worte können überall im Text stehen. Dazu habe ich bis jetzt diese Regex: "/(^| )".$wort."( |$)/i"
es existiert ein Pattern für Wortgrenze (word boundary).
und wie sieht dieses Pattern aus?
Was bedeutet ".?", und was möchtest Du eigentlich haben?
Ja so genau weiß ich das mittlerweile auch nicht mehr, aber ein Beispiel:
*s*h* soll sowohl das Wort 'Selfhtml' als auch 'Hash' etc. finden. Ich weiß nur nicht genau durch welches Pattern ich * am besten ersetze. Es soll ja die Bedutung haben kein Zeichen oder alle zeichen, ausser einem Leerzeichen, weil das eben die Wortgrenze ist.
Hi,
es existiert ein Pattern für Wortgrenze (word boundary).
und wie sieht dieses Pattern aus?
also, nachdem ich Dir nun sogar schon den englischen Begriff genannt habe, solltest Du das wirklich selbst in der PHP-Dokumentation finden können.
Was bedeutet ".?", und was möchtest Du eigentlich haben?
Ja so genau weiß ich das mittlerweile auch nicht mehr, aber ein Beispiel:
_Ich_ weiß sehr genau, was Du haben möchtest. _Du_ sollst es Dir überlegen.
Ich weiß nur nicht genau durch welches Pattern ich * am besten ersetze.
Grundlagenwissen. In dem anderen Thread, von dem ich mittlerweile auch weiß, hast Du sogar schon die Antwort bekommen.
Cheatah
Achso, ich wusste nicht, dass es PHP spezifisch ist. Ich habe jetzt das \b gefunden, das klappt wirklich prima. Ich habe immer in der Regex Beschreibung von Selfhtml nachgesehen, da steht das nicht.
Zu der Lösung für dass Wildcard Problem. Ich habe das \S*? ausprobiert, aber es tut sich irgendwie gar nichts. Muss ich das in bestimmte Klammern setzen? Wenn ich es nämlich in () setzen klappts, aber heißt () nicht, dass das Gefundene gespeichert werden soll? Muss ich das speichern? Irgendwie bin ich jetzt verwirrt. :}
Hallo du da draußen,
Ich habe jetzt das \b gefunden, das klappt wirklich prima. Ich habe immer in der Regex Beschreibung von Selfhtml nachgesehen, da steht das nicht.
Auf http://selfhtml.teamone.de/cgiperl/sprache/regexpr.htm#zeichenketten ist es eindeutig nachzulesen.
Grüße von hier drinnen, aus Biberach an der Riss (http://www.stadt-biberach.de/),
Candid Dauth (Dogfish)
Hi,
Achso, ich wusste nicht, dass es PHP spezifisch ist.
ist es nicht. Du findest es auch in den Implementierungen anderer Sprachen von Regular Expressions.
Ich habe jetzt das \b gefunden, das klappt wirklich prima.
Bingo.
Ich habe immer in der Regex Beschreibung von Selfhtml nachgesehen, da steht das nicht.
So gut es auch ist, SelfHTML ist niemals, unter gar keinen Umständen ein Ersatz für Primärliteratur: die Dokumentation der von Dir verwendeten Technik.
Zu der Lösung für dass Wildcard Problem. Ich habe das \S*? ausprobiert,
Nicht ausprobieren, nicht raten. Denken. Was bedeutet "\S*?"? Was möchtest Du haben?
Wenn ich es nämlich in () setzen klappts, aber heißt () nicht, dass das Gefundene gespeichert werden soll?
Jein. Die Dokumentation sagt Dir mehr. Klammern sind hier aber nicht nötig.
Cheatah
\S*? bedeutet kein Leerzeichen ein oder mehrmal und das nochmal kein oder mehrmal. Ohgott ist das kompliziert :)
Jetzt schlag ich mich auch noch mit den HTML Tags rum, weil solche hab ich auch noch im Text und in denen soll natürlich nichts ersetzt werden.
Hi,
\S*? bedeutet kein Leerzeichen
Whitspace, nicht Leerzeichen.
ein oder mehrmal
Kein oder mehrmal.
und das nochmal kein oder mehrmal.
Und das so wenig wie möglich (ungreedy).
Ohgott ist das kompliziert :)
Eigentlich nicht :-)
Jetzt schlag ich mich auch noch mit den HTML Tags rum, weil solche hab ich auch noch im Text und in denen soll natürlich nichts ersetzt werden.
Und schon reichen Regular Expressions nicht mehr aus. Strukturinformationen lassen sich damit nicht verarbeiten.
Cheatah
Aber warum klappts ohne Klammern nicht?
Hi,
Aber warum klappts ohne Klammern nicht?
vermutlich hast Du irgend etwas falsch gemacht.
Cheatah
Hallo nochmal.
Ich will den Thread nicht noch Tage weiterführen, deshalb:
$word = "*s*h*";
$word = str_replace('*','\S*?',$word);
$pattern = "/\b".$word."\b/i";
OK?
MfG _Siro. }((<(*_)
Genau so hab ichs gemacht, aber er ersetzt nur, wenn sich alles in Klammern befindet:
$word = "*s*h*";
$word = str_replace('*','(\S*?)',$word);
$pattern = "/\b".$word."\b/i";
Hallo.
Genau so hab ichs gemacht, aber er ersetzt nur, wenn sich alles in Klammern befindet:
Tja. Ich glaube, da ist sogar O'Reilly sprachlos. (:
Hauptsache ist, es klappt erstmal.
MfG _Siro.
Hallo.
Genau so hab ichs gemacht, aber er ersetzt nur, wenn sich alles in Klammern befindet:
Tja. Ich glaube, da ist sogar O'Reilly sprachlos. (:
Hauptsache ist, es klappt erstmal.
MfG _Siro.
Stimmt danke für eure Hilfe.
Hallo mal wieder.
Ich dachte wir hatten das geklärt?
Offensdichtlich hast du deinen eigenen Thread nicht bis zum Ende verfolgt.
MfG _Siro.
Hallo mal wieder.
Ich dachte wir hatten das geklärt?
Offensdichtlich hast du deinen eigenen Thread nicht bis zum Ende verfolgt.MfG _Siro.
Hallo
habe ich sehr wohl es hat aber leider nicht geklappt. Besonders die Ersetzung mit dem *. Egal durch welches Pattern ich das ersetze, es kommt nie genau das raus was ich brauche.