Foros del Web » Programando para Internet » PHP »

Extracción de Subcadenas

Estas en el tema de Extracción de Subcadenas en el foro de PHP en Foros del Web. Saludos maestros, he aquí mi cuestión. Con las funciones de manipulación de cadenas y mas explicitamente la función strstr() puedo extraer subcadenas de una cadena ...
  #1 (permalink)  
Antiguo 14/11/2005, 00:20
 
Fecha de Ingreso: enero-2002
Mensajes: 4.159
Antigüedad: 22 años, 3 meses
Puntos: 22
Extracción de Subcadenas

Saludos maestros, he aquí mi cuestión.

Con las funciones de manipulación de cadenas y mas explicitamente la función strstr() puedo extraer subcadenas de una cadena mas grande, ahora bien, necesito extraer digamos 10 caracteres antes y 10 caracteres después de la subcadena seleccinada, a ver me explico mejor con un ejemplo.

Digamos que tendo la cadena:

$cadena_grande="la hermosa casa de las verdes colinas de mi amigo Luis, es maravillosa para las vacaciones de verano."

Ahora bien, yo lo que deseo es poder seleccionar 10 carateres antes y 10 caracteres después de la subcadena amigo Luis y guardarlo en otra variable cuyo contenido seria entonces:

"nas de mi amigo Luis, es marav"

Si no es abusar de su ayuda, ¿Sería posible hacer lo antes planteado pero con palabras completas? esto es, 10 palabras antes y 10 palabras después de las subcadena en cuestión.

La verdad ya me exprimí los sesos y no se como, ya leí todas las funciones de cadenas de PHP y no encuetra ninguna que me ayude o más específicvamente no encontré algún método lógico de lograrlo con las cadenas.

Agradezco infinitamete de antemano cualquier ayuda.

Saludos.

Última edición por Elalux; 14/11/2005 a las 00:28
  #2 (permalink)  
Antiguo 14/11/2005, 01:29
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 20 años, 4 meses
Puntos: 5
A lo mejor esto te sirve :)

Código PHP:
<?
$cadena_grande
="coche casa verde tela armonía dejadez carátula la hermosa casa de las verdes colinas de mi amigo Luis, es maravillosa para las vacaciones de verano estaba el señor sentado en el tejado cuando un estrépito le alertó.";

function 
pasacadena($cadena_incial,$subcadena,$antes=0,$despues=0)
{
    
$subcadena=trim($subcadena);
    if (
ereg($subcadena,$cadena_incial))
    {
        
$parcial=explode($subcadena,$cadena_incial);
        if (
count($parcial)>1)
        {
            
$derecha=explode(" ",$parcial[0]);
            
$derecha=array_reverse($derecha);
            foreach (
$derecha as $valor)

                if (
$cont<=$antes || $antes==0)
                {
                    
$cadena_izquierda=$valor." ".$cadena_izquierda;
                    
$cont++;
                }

            
$izquierda=explode(" ",$parcial[1]);
            
$cont=0;
            foreach (
$izquierda as $valor)

                if (
$cont<=$despues ||  $despues==0)
                {
                    
$cadena_derecha=$cadena_derecha." ".$valor;
                    
$cont++;
                }
        }

    }
return 
$cadena_izquierda."<b>".$subcadena."</b>".$cadena_derecha;
}

print 
pasacadena($cadena_grande,"la hermosa",5,5);
Si se trata de una frase con palabras separadas por un espacio y sólo una coincidencia de la cadena buscada debe de funcionar. Si requieres más cosas ya se haría mas complicadillo .

Lo que hago es que en caso de encontrar el patrón en la frase larga, la separo en dos trozos, uno por la derecha y otro por la izquierda, y luego cada trozo lo separo usando el caracter de espacio. Para crear cada parte (derecha o izquierda), en un caso recorro el array creado invirtiendolo previamente y condicionando la concatenación del elemento del array a que no se sobrepase el máximo de palabras pasado como argumento a la función($antes); y en el otro más o menos lo mismo sólo que cambio el orden de concatenación(concateno $despues veces) y no invierto el array. Juas vaya lio...

Lo mismo se puede hacer más fácil...

Salu2 ;)

PD: si omites el/los parámetro/s a la función de antes y/o después(numero de palabras antes y después) se mostrarán todas(todas las de antes y/o todas las de después claro)
__________________
[+]
[+]

Última edición por yoseman; 14/11/2005 a las 01:41
  #3 (permalink)  
Antiguo 15/11/2005, 12:30
 
Fecha de Ingreso: enero-2002
Mensajes: 4.159
Antigüedad: 22 años, 3 meses
Puntos: 22
Un millón de grácias yoseman, estaba mal mi lógica no el lenguaje, ya entendí como deben ser la estructuras, ahora voy a trabajar para que funciones cuando se repitan las subcadenas y para palabras compoletas.

Muchísimas gracias.

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:40.