¿Cómo obtener una subcadena entre dos cadenas en PHP?

Resuelto Nadjib Mami asked hace 54 años • 39 respuestas

Necesito una función que devuelva la subcadena entre dos palabras (o dos caracteres). Me pregunto si existe una función php que lo logre. No quiero pensar en expresiones regulares (bueno, podría hacer una, pero realmente no creo que sea la mejor manera de hacerlo). Pensamiento strposy substrfunciones. He aquí un ejemplo:

$string = "foo I wanna a cake foo";

Llamamos a la función: $substring = getInnerSubstring($string,"foo");
Devuelve: "Quiero un pastel".


Actualización: Bueno, hasta ahora, solo puedo obtener una subcadena entre dos palabras en una sola cadena. ¿Me permiten ir un poco más allá y preguntar si puedo extender el uso de getInnerSubstring($str,$delim)para obtener cualquier cadena que esté entre el valor delimitador? ejemplo:

$string =" foo I like php foo, but foo I also like asp foo, foo I feel hero  foo";

Obtengo una matriz como {"I like php", "I also like asp", "I feel hero"}.

Nadjib Mami avatar Jan 01 '70 08:01 Nadjib Mami
Aceptado

Si las cadenas son diferentes (es decir: [foo] y [/foo]), eche un vistazo a esta publicación de Justin Cook. Copio su código a continuación:

function get_string_between($string, $start, $end){
    $string = ' ' . $string;
    $ini = strpos($string, $start);
    if ($ini == 0) return '';
    $ini += strlen($start);
    $len = strpos($string, $end, $ini) - $ini;
    return substr($string, $ini, $len);
}

$fullstring = 'this is my [tag]dog[/tag]';
$parsed = get_string_between($fullstring, '[tag]', '[/tag]');

echo $parsed; // (result = dog)
Alejandro García Iglesias avatar Mar 22 '2012 16:03 Alejandro García Iglesias

Las expresiones regulares son el camino a seguir:

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

en líneaPhp

nkkollaw avatar Jun 12 '2014 15:06 nkkollaw