Ich benötige eine Funktion, die den Teilstring zwischen zwei Wörtern (oder zwei Zeichen) zurückgibt. Ich frage mich, ob es eine PHP-Funktion gibt, die das erreicht. Ich möchte nicht über Regex nachdenken (nun, ich könnte einen machen, denke aber wirklich nicht, dass dies der beste Weg ist). Denken strpos
und substr
Funktionen. Hier ist ein Beispiel:
$string = "foo I wanna a cake foo";
Wir rufen die Funktion auf: $substring = getInnerSubstring($string,"foo");
Sie gibt zurück: "Ich möchte einen Kuchen".
Danke im Voraus.
Update:
Nun, bis jetzt kann ich nur einen Teilstring zwischen zwei Wörtern in nur einer Zeichenfolge erhalten. Erlauben Sie mir, mich etwas weiter gehen zu lassen und zu fragen, ob ich die Verwendung von erweitern kann getInnerSubstring($str,$delim)
, um Zeichenfolgen zu erhalten, die zwischen dem Begrenzungswert liegen. Beispiel:
$string =" foo I like php foo, but foo I also like asp foo, foo I feel hero foo";
Ich bekomme ein Array wie {"I like php", "I also like asp", "I feel hero"}
.
\Illuminate\Support\Str::between('This is my name', 'This', 'name');
ist dies praktisch. laravel.com/docs/7.x/helpers#method-str-betweenAntworten:
Wenn die Zeichenfolgen unterschiedlich sind (z. B. [foo] & [/ foo]), schauen Sie sich diesen Beitrag von Justin Cook an. Ich kopiere seinen Code unten:
quelle
Reguläre Ausdrücke sind der richtige Weg:
onlinePhp
quelle
Beispielverwendung:
quelle
Anwendungsbeispiel:
Wenn Sie umgebende Leerzeichen entfernen möchten, verwenden Sie
trim
. Beispiel:quelle
quelle
benutze die strstr php Funktion zweimal.
Ausgänge:
"is a great day to"
quelle
Ich mag die Lösungen für reguläre Ausdrücke, aber keine der anderen passt zu mir.
Wenn Sie wissen, dass es nur 1 Ergebnis geben wird, können Sie Folgendes verwenden:
Ändern Sie VOR und NACH den gewünschten Trennzeichen.
Beachten Sie auch, dass diese Funktion den gesamten String zurückgibt, falls nichts übereinstimmt.
Diese Lösung ist mehrzeilig, aber Sie können je nach Bedarf mit den Modifikatoren spielen.
quelle
Kein PHP-Profi. Aber ich bin kürzlich auch gegen diese Wand gelaufen und das habe ich mir ausgedacht.
quelle
Wenn Sie
foo
als Trennzeichen verwenden, schauen Sie sich anexplode()
quelle
Beispiel:
Dies wird "den Kerl in der Mitte" zurückgeben.
quelle
Wenn Sie mehrere Wiederholungen aus einer einzelnen Zeichenfolge haben und unterschiedliche [Start] - und [\ End] -Muster haben. Hier ist eine Funktion, die ein Array ausgibt.
quelle
Hier ist eine Funktion
Verwenden Sie es wie
Ausgabe (beachten Sie, dass Leerzeichen vor und am und Ihrer Zeichenfolge zurückgegeben werden, falls vorhanden)
Wenn Sie das Ergebnis trimmen möchten, verwenden Sie die Funktion wie
Ergebnis : Diese Funktion gibt false zurück, wenn sie
$boundstring
nicht gefunden wurde$string
oder$boundstring
nur einmal vorhanden$string
ist. Andernfalls wird die Teilzeichenfolge zwischen dem ersten und dem letzten Auftreten von$boundstring
in zurückgegeben$string
.Verweise
quelle
IF
Klausel sprichst du? Vielleicht habe ich einen Tippfehler gemacht, aber um ehrlich zu sein, kann ich momentan nichts Seltsames sehen. BeideIF
s, die ich in der obigen Funktion verwendet habe, haben die richtigen Umgebungsbedingungen in Klammern. ErstensIF
haben Sie auch geschweifte Klammern (Klammern), die den 2-Zeilen-Block umgeben,IF
zweitens brauchen Sie sie nicht, weil es sich um einen einzeiligen Code handelt. Was fehlt mir?Verbesserung von Alejandros Antwort . Sie können die Argumente
$start
oder$end
leer lassen und es wird der Anfang oder das Ende der Zeichenfolge verwendet.quelle
Verwenden:
quelle
Ein bisschen verbesserter Code von GarciaWebDev und Henry Wang. Wenn $ start oder $ end leer angegeben ist, gibt die Funktion Werte vom Anfang oder bis zum Ende des $ -Strings zurück. Es ist auch die Option "Inklusive" verfügbar, unabhängig davon, ob das Suchergebnis eingeschlossen werden soll oder nicht:
quelle
Ich muss dem Beitrag von Julius Tilvikas etwas hinzufügen. Ich habe nach einer Lösung wie dieser gesucht, die er in seinem Beitrag beschrieben hat. Aber ich denke, es gibt einen Fehler. Ich bekomme nicht wirklich die Zeichenfolge zwischen zwei Zeichenfolgen, ich bekomme auch mehr mit dieser Lösung, weil ich die Länge der Startzeichenfolge subtrahieren muss. Wenn ich das mache, bekomme ich wirklich den String zwischen zwei Strings.
Hier sind meine Änderungen seiner Lösung:
Greetz
V.
quelle
Versuchen Sie dies, seine Arbeit für mich, erhalten Sie Daten zwischen Testwort .
quelle
Im PHP-
strpos
Stil wird dies zurückgegeben,false
wenn die Start-sm
oder Endmarkeem
nicht gefunden wird.Dieses Ergebnis (
false
) unterscheidet sich von einer leeren Zeichenfolge, die Sie erhalten, wenn zwischen der Start- und der Endmarke nichts steht.Die Funktion gibt nur die erste Übereinstimmung zurück.
Es ist offensichtlich, aber erwähnenswert, dass die Funktion zuerst sucht
sm
und dann suchtem
.Dies bedeutet, dass Sie möglicherweise nicht das gewünschte Ergebnis / Verhalten erhalten, wenn
em
zuerst gesucht werden muss und dann die Zeichenfolge auf der Suche nach rückwärts analysiert werden musssm
.quelle
Dies ist die Funktion, die ich dafür benutze. Ich habe zwei Antworten in einer Funktion für einzelne oder mehrere Trennzeichen kombiniert.
Zur einfachen Verwendung (gibt zwei zurück):
Um jede Zeile in einer Tabelle zum Ergebnisarray zu bringen:
quelle
ich benutze
Ersetzen Sie <TAG> durch das gewünschte Trennzeichen.
quelle
eine bearbeitete Version dessen, was Alejandro García Iglesias gesagt hat.
Auf diese Weise können Sie eine bestimmte Position der Zeichenfolge auswählen, die Sie abrufen möchten, basierend darauf, wie oft das Ergebnis gefunden wird.
Verwendung:
strpos verfügt über eine zusätzliche optionale Eingabe, um die Suche an einem bestimmten Punkt zu starten. Daher speichere ich die vorherige Position in $ cPos. Wenn die for-Schleife erneut überprüft wird, beginnt sie am Ende der Stelle, an der sie aufgehört hat.
quelle
Die überwiegende Mehrheit der Antworten hier beantwortet den bearbeiteten Teil nicht, ich denke, sie wurden zuvor hinzugefügt. Es kann mit Regex gemacht werden, wie eine Antwort erwähnt. Ich hatte einen anderen Ansatz.
Diese Funktion durchsucht $ string und findet die erste Zeichenfolge zwischen $ start- und $ end-Zeichenfolgen, beginnend an der $ offset-Position. Anschließend wird die $ offset-Position aktualisiert, um auf den Anfang des Ergebnisses zu zeigen. Wenn $ includeDelimiters true ist, werden die Trennzeichen in das Ergebnis aufgenommen.
Wenn die Zeichenfolge $ start oder $ end nicht gefunden wird, wird null zurückgegeben. Es wird auch null zurückgegeben, wenn $ string, $ start oder $ end eine leere Zeichenfolge sind.
Die folgende Funktion findet alle Zeichenfolgen, die zwischen zwei Zeichenfolgen liegen (keine Überlappungen). Es erfordert die vorherige Funktion und die Argumente sind dieselben. Nach der Ausführung zeigt $ offset auf den Anfang der zuletzt gefundenen Ergebniszeichenfolge.
Beispiele:
str_between_all('foo 1 bar 2 foo 3 bar', 'foo', 'bar')
gibt[' 1 ', ' 3 ']
.str_between_all('foo 1 bar 2', 'foo', 'bar')
gibt[' 1 ']
.str_between_all('foo 1 foo 2 foo 3 foo', 'foo', 'foo')
gibt[' 1 ', ' 3 ']
.str_between_all('foo 1 bar', 'foo', 'foo')
gibt[]
.quelle
Verwenden:
quelle
Ich hatte einige Probleme mit der hier verwendeten Funktion get_string_between (). Also kam ich mit meiner eigenen Version. Vielleicht könnte es Menschen im selben Fall wie mir helfen.
quelle
schrieb diese vor einiger Zeit, fand es sehr nützlich für eine breite Palette von Anwendungen.
quelle
Mit einigem Fehler fangen. Insbesondere erfordern die meisten der vorgestellten Funktionen, dass $ end vorhanden ist, obwohl es in meinem Fall tatsächlich optional sein musste. Verwenden Sie dies, wenn $ end optional ist, und bewerten Sie FALSE, wenn $ start überhaupt nicht vorhanden ist:
quelle
Die UTF-8-Version der Antwort von @Alejandro Iglesias funktioniert für nicht-lateinische Zeichen:
quelle
Ich habe die beste Lösung dafür von tonyspiro bekommen
quelle
Mit dieser kleinen Funktion ist dies ganz einfach möglich:
quelle
Ich benutze dies seit Jahren und es funktioniert gut. Könnte wohl effizienter gemacht werden, aber
Grabstring ("Teststring", "", "", 0) gibt
Teststring zurück. Grabstring ("Teststring", "Test", "", 0) gibt String-
Grabstring ("Teststring", "s", "", zurück) 5) gibt einen String zurück
}}
quelle