¿Cómo obtener una subcadena entre dos cadenas en PHP?
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 strpos
y substr
funciones. 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"}
.
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)
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