Wie bekomme ich einen Teilstring zwischen zwei Strings in PHP?
Lesezeit: 3 Minuten
Nadjib Mami
Ich brauche eine Funktion, die die Teilzeichenfolge 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 (na ja, ich könnte eine machen, glaube aber wirklich nicht, dass es der beste Weg ist). In Gedanken an strpos und substr Funktionen. Hier ist ein Beispiel:
$string = "foo I wanna a cake foo";
Wir nennen die Funktion: $substring = getInnerSubstring($string,"foo");
Es kommt zurück: “Ich möchte einen Kuchen”.
Aktualisieren:
Nun, bis jetzt kann ich nur eine Teilzeichenfolge zwischen zwei Wörtern in nur einer Zeichenfolge erhalten. Erlauben Sie mir, ein bisschen weiter zu gehen und zu fragen, ob ich die Verwendung von erweitern kann getInnerSubstring($str,$delim) um alle Zeichenfolgen zu erhalten, die zwischen dem Trennzeichen 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"}.
Es funktioniert großartig! Und für Leute, die nicht an RegEx gewöhnt sind, fügen Sie einfach “\” hinzu, um Sonderzeichen zu umgehen: sandbox.onlinephpfunctions.com/code/…
– JCarlosR
19. Januar 2020 um 15:39 Uhr
Wenn Sie mehrere Vorkommen benötigen, versuchen Sie es mit diesem multi
– Benutzer1424074
27. Juli 2020 um 16:22 Uhr
Schön und sauber.
– optimiert
7. Januar um 9:23
Übrigens, Ihr Absatz “Beispielverwendung” ist falsch. Argumente sind in einer völlig falschen Reihenfolge.
– that-ben
1. August 2018 um 14:28 Uhr
function getInnerSubstring($string,$delim){
// "foo a foo" becomes: array(""," a ","")
$string = explode($delim, $string, 3); // also, we only need 2 items at most
// we check whether the 2nd is set and return it, otherwise we return an empty string
return isset($string[1]) ? $string[1] : '';
}
Anwendungsbeispiel:
var_dump(getInnerSubstring('foo Hello world foo','foo'));
// prints: string(13) " Hello world "
Wenn Sie umgebende Leerzeichen entfernen möchten, verwenden Sie trim. Beispiel:
var_dump(trim(getInnerSubstring('foo Hello world foo','foo')));
// prints: string(11) "Hello world"
Das ist nett, weil es ein Einzeiler ist, aber leider ist es auf ein eindeutiges Trennzeichen beschränkt, dh wenn Sie die Teilzeichenfolge zwischen “foo” und “bar” benötigen, müssen Sie eine andere Strategie anwenden.
– mastasi
8. Mai 2017 um 1:23 Uhr
Bryce
Verwenden Sie die strstr-PHP-Funktion zweimal.
$value = "This is a great day to be alive";
$value = strstr($value, "is"); //gets all text from needle on
$value = strstr($value, "be", true); //gets all text before needle
echo $value;
Ausgänge: "is a great day to"
Das ist nett, weil es ein Einzeiler ist, aber leider ist es auf ein eindeutiges Trennzeichen beschränkt, dh wenn Sie die Teilzeichenfolge zwischen “foo” und “bar” benötigen, müssen Sie eine andere Strategie anwenden.
Beispielsweise möchten Sie das Array von Zeichenfolgen (Schlüsseln) zwischen @@ im folgenden Beispiel, wobei “https://stackoverflow.com/” nicht dazwischen fällt
Wenn Sie Laravel bereits verwenden,
\Illuminate\Support\Str::between('This is my name', 'This', 'name');
ist bequem. laravel.com/docs/7.x/helpers#method-str-between– Ryan
22. April 2020 um 21:40 Uhr