Ich frage mich nur, wie ich nach einem bestimmten Teilstring in PHP alles entfernen könnte
Ex:
Posted On April 6th By Some Dude
Ich möchte es so haben, dass der gesamte Text entfernt wird, einschließlich und nach der Unterzeichenfolge "By".
Vielen Dank
Antworten:
Im Klartext: Geben Sie mir den Teil der Zeichenfolge, der am Anfang beginnt und an der Stelle endet, an der Sie dem Deliminator zum ersten Mal begegnen.
quelle
Wenn Sie PHP 5.3+ verwenden, sehen Sie sich das $ before_needle-Flag von strstr () an.
quelle
FALSE
wenn ein Teil der Zeichenfolge nicht gefunden wird. Die Lösung könnte also sein:echo strstr($s, 'By', true) ?: $s;
explode(' By', $s)[0]
IMHO von squarecandyWie wäre es mit
explode
:Vorteile:
$result[1]
würdeSome Dude
in diesem Beispiel zurückkehren)quelle
Du könntest es tun:
quelle
Eine Methode wäre:
quelle
By
, sondern durch ein Zeichen im 2. Parameter aufgeteilt. Das heißt, es wird entwederB
oder geteilty
. Technisch gesehen bekommt es nicht alles vor einemBy
.strtok('a:b', ':')
wird zurückgegeben,a
aberstrtok(':b', ':')
zurückgegebenb
, keine leere Zeichenfolge, wie Sie es erwarten würden.Austins Antwort funktioniert für Ihren Beispielfall.
Im Allgemeinen sollten Sie sich die Funktionen für reguläre Ausdrücke ansehen, wenn sich die Teilzeichenfolge, auf die Sie aufteilen, zwischen den Zeichenfolgen unterscheiden kann:
quelle
Versuche dies.
Verwendung:
quelle
Sie können verwenden
list
undexplode
Funktionen:quelle
quelle
preg_replace
bietet einen Weg:quelle
Mit regulären Ausdrücken:
$string = preg_replace('/\s+By.*$/', '', $string)
quelle
Im Folgenden finden Sie die effizienteste Methode (nach Laufzeit), um alles nach dem ersten By in einer Zeichenfolge abzuschneiden . Wenn By nicht vorhanden ist, wird die vollständige Zeichenfolge zurückgegeben. Das Ergebnis ist in $ sResult.
Wenn Sie nicht zwischen Groß- und Kleinschreibung unterscheiden möchten , verwenden Sie Stripos anstelle von Strpos. Wenn Sie der Meinung sind, dass By möglicherweise mehr als einmal vorhanden ist und nach dem letzten Auftreten alles ausschneiden möchte, verwenden Sie strrpos .
Im Folgenden finden Sie eine weniger effiziente Methode, die jedoch weniger Codeplatz beansprucht. Diese Methode ist auch flexibler und ermöglicht es Ihnen, jeden regulären Ausdruck zu verwenden.
Wenn Sie beispielsweise nach dem Tag alles entfernen möchten:
Wenn Sie die Groß- und Kleinschreibung nicht berücksichtigen, fügen Sie den Modifikator i wie folgt hinzu:
Um alles über den letzten bekommen von , wenn Sie denken , es könnte mehr sein als ein, fügen Sie ein extra * am Anfang so.:
Aber hier ist auch eine wirklich mächtige Möglichkeit, mit preg_match das zu tun, was Sie vielleicht versuchen:
Reguläre Ausdrücke mögen zunächst verwirrend erscheinen, aber sie können sehr mächtig und Ihr bester Freund sein, wenn Sie sie beherrschen! Viel Glück!
quelle
Warum...
Dies ist wahrscheinlich übertrieben für die Bedürfnisse der meisten Menschen, aber es spricht eine Reihe von Dingen an, die jede einzelne Antwort oben nicht tut. Von den darin angesprochenen Artikeln wurden drei für meine Bedürfnisse benötigt. Mit einer engen Klammerung und dem Löschen der Kommentare könnte dies bei nur 13 Codezeilen noch lesbar bleiben.
Dies betrifft Folgendes:
Verwendung:
Senden Sie die ursprüngliche Zeichenfolge, suchen Sie nach Zeichen / Zeichenfolge, "R" / "L" für den Start auf der rechten oder linken Seite, wahr / falsch für die Groß- und Kleinschreibung. Suchen Sie beispielsweise nach "hier" ohne Berücksichtigung der Groß- und Kleinschreibung. Beginnen Sie in der Zeichenfolge rechts.
Die Ausgabe wäre "Jetzt sind hier einige Wörter". Wenn Sie das "R" in ein "L" ändern, wird Folgendes ausgegeben: "Now".
Hier ist die Funktion:
quelle
Verwenden Sie die strstr- Funktion.
Der dritte Parameter
true
weist die Funktion an, alles vor dem ersten Auftreten des zweiten Parameters zurückzugeben.quelle
strtok($str, 'By')
sieht einfacher ausquelle