Wie bekomme ich einen Teilstring zwischen zwei Strings in PHP?

Lesezeit: 3 Minuten

Wie bekomme ich einen Teilstring zwischen zwei Strings in PHP
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"}.

Wie bekomme ich einen Teilstring zwischen zwei Strings in PHP
nkkollaw

Reguläre Ausdrücke sind der richtige Weg:

$str="before-str-after";
if (preg_match('/before-(.*?)-after/', $str, $match) == 1) {
    echo $match[1];
}

onlinePhp

  • 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

1646896447 840 Wie bekomme ich einen Teilstring zwischen zwei Strings in PHP
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.

    – mastasi

    8. Mai 2017 um 1:23 Uhr

1646896448 479 Wie bekomme ich einen Teilstring zwischen zwei Strings in PHP
Ravi Verma

function getInbetweenStrings($start, $end, $str){
    $matches = array();
    $regex = "/$start([a-zA-Z0-9_]*)$end/";
    preg_match_all($regex, $str, $matches);
    return $matches[1];
}

Beispielsweise möchten Sie das Array von Zeichenfolgen (Schlüsseln) zwischen @@ im folgenden Beispiel, wobei “https://stackoverflow.com/” nicht dazwischen fällt

$str = "C://@@ad_custom_attr1@@/@@upn@@/@@samaccountname@@";
$str_arr = getInbetweenStrings('@@', '@@', $str);

print_r($str_arr);

  • Vergessen Sie nicht, “/” wie “\/” zu maskieren, wenn es sich um eine $start- oder $end-Variable handelt.

    – Luboš Remplík

    4. November 2014 um 8:44 Uhr

  • Was macht \w tun in Regex?

    – mickmackusa

    29. Juli 2021 um 20:51 Uhr

986810cookie-checkWie bekomme ich einen Teilstring zwischen zwei Strings in PHP?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy