PHP Die "mitte" vom String

chrisi01

Romy lieb haben
ID: 101113
L
26 November 2008
2.854
238
hi

hab das jetzt schon ein paar mal gebraucht und einfach keine fertig Funktion gefunden. Jetzt interessiert es mich gibt es überhaupt eine? Als Beispiel folgender String:

"Ich bin ein dummer langer String schimpf mich der 99. String und String euch alle ab"

jetzt will ich alles zwischen den "schimpf" bis zum ersten "String" nach "schimpf" haben (in diesem beispiel also " mich der 99. ")

bisher habe ich es immer so gelöst:

PHP:
function strmitte ($start, $ende, $wert)
{
   $anfang_weg = explode($start, $wert);
   $ende_weg = explode($ende, $anfang_weg[1]);
   return $ende_weg[0];
}
//...
//Die Verwendung der Funktion
$string = "Ich bin ein dummer langer String schimpf mich der 99. String und String euch alle ab";
$ausgabe = strmitte("schimpf", "String", $string);
echo $ausgabe;
//Ausgabe: mich der 99.

geht es auch "leichter"?

Danke

mfg

Chris
 
explode erzeugt unnötig mehr Speicher, folgende Lösung wäre besser:

Code:
Erste Pos von "schimpf" finden
Auf die Pos die Länge von schmipf addieren
Ab der nun berechneten Position nach "String" suchen
nun einfach ein substring von der aus 2. berechneten Adresse bis zu der in 3. berechenten Adresse machen
 
Wie wäre es mit einer Prise regulärer Ausdrücke?
PHP:
function strmitte ($start, $ende, $wert)
{
    $MATCH = array();
    $pattern = '/'.$start.'\s*(.*?)\s*'.$ende.'/s';
    preg_match($pattern, $wert, $MATCH);
    return (isset($MATCH[1]) ? $MATCH[1] : false);
}
//...
//Die Verwendung der Funktion
$string = "Ich bin ein dummer langer String schimpf mich der 99. String und String euch alle ab";
$ausgabe = strmitte("schimpf", "String", $string);
echo $ausgabe;
//Ausgabe: mich der 99.
 
Jup die regex vesion is schon schick, aber etwas schweres geraet fuer so eine simple suche:
PHP:
function strmitte ($start, $ende, $wert){
   $start = strpos($wert, $start) + strlen($start);
   $end = strpos($wert, $end, $start);
   return substr($wert, $start, $end-$start);
}