Foros del Web » Programando para Internet » PHP »

Busqueda de cadenas dentro de cadenas

Estas en el tema de Busqueda de cadenas dentro de cadenas en el foro de PHP en Foros del Web. Hola¡ Me uno al foro con intención de ayudar y ser ayudado, pero como pasa en todos lados, primero necesito una ayudita a ver si ...
  #1 (permalink)  
Antiguo 08/02/2011, 06:35
 
Fecha de Ingreso: febrero-2011
Mensajes: 11
Antigüedad: 13 años, 2 meses
Puntos: 0
Pregunta Busqueda de cadenas dentro de cadenas

Hola¡ Me uno al foro con intención de ayudar y ser ayudado, pero como pasa en todos lados, primero necesito una ayudita a ver si alguien me echa un cable.


Tengo una funcion que me devuelve una cadena de este tipo:

Hola hola <a href="unenlacequeponeunusuario.php">Enlace</a> Mas cosas mas cosas

Debo hacerle un substring para que saque solo los 20 primeros caracteres visibles, pero claro, al hacer eso el enlace se rompe.

La forma "bruta" de hacerlo sería buscar de alguna forma el primer <a y luego /a> para que me dieran posicion de inicio y final, hacer la resta y en vez de coger 20, coger 20+N de la medida de la cadena -6 de la palabra "enlace", pero la función más acorde a esto que sería strpos() por lo que veo no trabaja con cadenas, si no con un solo caracter para la búsqueda, o eso o lo hago mal.

La cadena a mostrar sería: "hola hola Enlace Mas", con el enlace correcto.
¿Alguna idea?
Gracias de antemano.
  #2 (permalink)  
Antiguo 08/02/2011, 06:37
Avatar de bUllan9ebrio  
Fecha de Ingreso: enero-2011
Ubicación: Chile
Mensajes: 1.128
Antigüedad: 13 años, 2 meses
Puntos: 128
Respuesta: Busqueda de cadenas dentro de cadenas

y si la cuentas??? con strlen, cuentas el largo y luego haces un substr al inicio para sacar los caracteres que quieres sacar y al final igual???
  #3 (permalink)  
Antiguo 08/02/2011, 06:40
 
Fecha de Ingreso: febrero-2011
Mensajes: 11
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Busqueda de cadenas dentro de cadenas

No me sirve, porque el strlen me contaría la cadena entera. Lo que necesito saber es la posición del primer <a href (la posicion concreta del <, pero buscando esa cadena) y del primer </a>
  #4 (permalink)  
Antiguo 08/02/2011, 10:45
 
Fecha de Ingreso: octubre-2009
Mensajes: 245
Antigüedad: 14 años, 6 meses
Puntos: 17
Respuesta: Busqueda de cadenas dentro de cadenas

Estas haciendo scraping de algún sitio ?
__________________
Saludos.
  #5 (permalink)  
Antiguo 09/02/2011, 05:24
 
Fecha de Ingreso: febrero-2011
Mensajes: 11
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Busqueda de cadenas dentro de cadenas

Nono... tengo una página con usuarios y mensajes entre ellos, pero no quiero que salga por ejmplo un enlace que sea http://www.unenlacelargolargolargolargolargolargolargolar golargolargolargolargolargolargolargolargo.com porque me descuadra las tds, por eso hice la función que cambia eso por <a href="elenlaceanterior">Enlace</a>.
Pero al querer hacer ahora un substring, no puedo porque si el mensaje es "hola, mira este enlace:" y le hago un substring de 40 caracteres se me queda a mitad del enlace y peta.
Por eso necesito ayuda para controlar el < del <a href y el </a>, para añadirle la cantidad de caracteres que mide el enlace
  #6 (permalink)  
Antiguo 09/02/2011, 06:42
 
Fecha de Ingreso: febrero-2011
Mensajes: 11
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Busqueda de cadenas dentro de cadenas

Bueno... me lo he solucionado de una forma un poco cutre:

function buscacadena($texto,$longitud=0){

$separado=explode(" ",$texto);
$texto="";
$encontrado=false;



for($i=0;($i<=count($separado))&&($longitudhastaho ra<=$longitud);$i++){

if(substr($separado[$i],0,4)=="href"){
$longitudenlace=strlen($separado[$i]);
$longitud+=$longitudenlace+75; //el 75 es el número de caracteres que mide el enlace que he generado antes
$encontrado=true;
}

$longitudhastahora+=strlen($separado[$i]);
$texto.=$separado[$i]." ";

}


}


if($longitud!=0){ // Si se envia longitud...
if(strlen($texto)>=$longitud){ $texto=substr($texto,0,$longitud)."...";} // Comprobamos si el texto es superior a esa logitud y lo truncamos.
}
return nl2br($texto);
}

Por lo que veo es un engorro... tiene que haber una forma más eficiente, si tenéis alguna idea para mejorarlo me vendrá muy bien.
Muchas gracias por las respuestas

Última edición por alvarranco; 09/02/2011 a las 06:46 Razón: Añadido de un apunte

Etiquetas: posicion, cadenas
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:11.