Foros del Web » Programando para Internet » PHP »

expresión regular en PHP + TWITTER

Estas en el tema de expresión regular en PHP + TWITTER en el foro de PHP en Foros del Web. Hola a todos miren tengo un problema a la hora de reemplazar palabras de Twitter (hastacks) las cuales lleban delante # o @. El caso ...
  #1 (permalink)  
Antiguo 28/06/2011, 04:37
 
Fecha de Ingreso: febrero-2011
Ubicación: Aldaia
Mensajes: 4
Antigüedad: 13 años, 1 mes
Puntos: 0
Pregunta expresión regular en PHP + TWITTER

Hola a todos miren tengo un problema a la hora de reemplazar palabras de Twitter (hastacks) las cuales lleban delante # o @. El caso es el siguiente: tengo texto que me viene de Twitter con palabras que lleban delante estos dos caracteres y mi problema llega cuando quiero convertirlas a un formato determinado solamente las que cumplan esa condición (como hace Twitter vamos :). Aqui os dejo la función

Código:
function reemplazarHastacks($c) {
    $regex = "/(@|#)\w+/";
    $encontrado = preg_match_all($regex, $c, $resultados, PREG_SET_ORDER);
    if ($encontrado) {
        foreach ($resultados as $resultado) {
            $c = str_replace($resultado[0], "<a class='hastack'>" . $resultado[0] . "</a>", $c);
        }
    }
    return $c;
}
Ejemplo de uso: Si le pasamos el texto "Hola a tod@s mi alias en Twitter es @zzarcon #forosdelweb #forosdelweb#mola".

Solo deberia meterme entre las etiquetas hastack los textos "@zzarcon" y "#forosdelweb" excluyendo los otros dos casos --> "tod@s,#forosdelweb#mola".
Actualmente la función que e puesto me cojeria los 4 casos :S asi que si alguien me pudiese ayudar se lo agradeceria! venga un saludo a todos!!! :)
  #2 (permalink)  
Antiguo 28/06/2011, 04:56
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Respuesta: expresión regular en PHP + TWITTER

Quieres que alguien corrija tu codigo, ¿o estas interesado en aprender expresiones regulares?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 28/06/2011, 08:34
 
Fecha de Ingreso: febrero-2011
Ubicación: Aldaia
Mensajes: 4
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: expresión regular en PHP + TWITTER

Me gustaria que alguien me ayudase con el codigo :)
  #4 (permalink)  
Antiguo 28/06/2011, 08:37
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Respuesta: expresión regular en PHP + TWITTER

¿Pero ayudar en que manera?

Te invito a estudiar un poco expresiones regulares, ya que es lo que necesitas.
http://www.forosdelweb.com/f18/aport...s-pcre-646110/

Para no capturar dichos caracteres cuando están cercanos a otra frase debes usar el meta carácter de boundary, osea \b, así que simplemente quedaría tu expresión así:
Cita:
\b(@|#)\w+\b
Supongo que con algo de interés hubieras llegado hasta ese punto por ti mismo.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 04/07/2011, 16:21
 
Fecha de Ingreso: febrero-2011
Ubicación: Aldaia
Mensajes: 4
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: expresión regular en PHP + TWITTER

La expresión la tenia bien; lo que me fallaba eran los espacios al realizar el foreach; la solución que hice:

Cita:
function reemplazarHastacks($c) {
$c = " " . $c . " ";
$regex = "/(@|#)\w+/i";
$encontrado = preg_match_all($regex, $c, $resultados, PREG_SET_ORDER);
if ($encontrado) {
foreach ($resultados as $resultado) {
$c = str_replace(" " . $resultado[0] . " ", " <a class='hastack'>" . $resultado[0] . "</a> ", $c);
}
}
return $c;
}
  #6 (permalink)  
Antiguo 04/07/2011, 16:44
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Respuesta: expresión regular en PHP + TWITTER

Cita:
Iniciado por zzarcon Ver Mensaje
La expresión la tenia bien; lo que me fallaba eran los espacios al realizar el foreach; la solución que hice:
Y mira... ¿hasta ahora se te ocurrió decir tremendo detalle?

Sabes, es de verdad importante detallar de manera inteligente nuestro problema siempre que se postea en los foros.

No somos adivinos, como para decir si el problema se trataba de la expresión regular, o de Twitter como bien menta el titulo del tema.

¡¡El problema eran los espacios!!

Un poco de luz no hace daño...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: expresion, regular, twitter
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 14:28.