Foros del Web » Programando para Internet » PHP »

necesito expresión regular sencilla para reemplazar

Estas en el tema de necesito expresión regular sencilla para reemplazar en el foro de PHP en Foros del Web. Hola buenas. Resulta que tengo una base de datos con enlaces a páginas webs de grupos de música, por ejemplo GrupoA tiene www.grupoa.com , etc. ...
  #1 (permalink)  
Antiguo 15/09/2005, 13:57
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 13 años, 7 meses
Puntos: 0
mejor forma de reemplazar enlaces guardados en una bd?

Hola buenas. Resulta que tengo una base de datos con enlaces a páginas webs de grupos de música, por ejemplo GrupoA tiene www.grupoa.com, etc. al igual que pasa con las discográficas.

El tema es que hay una sección donde se meten noticias de esos grupos y discográficas, y me gustaría que al introducir un nombre de un Grupo o una Discográfica, después se generara el enlace automáticamente.

La consulta en php hacia mysql ¿deberá buscar por cada palabra a ver si coincide con el nombre de algún grupo/discográfica y si hay coincidencia coger el enlace? ¿Y para grupos de varias palabras? Se me torna complicado...
  #2 (permalink)  
Antiguo 15/09/2005, 14:10
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 14 años, 7 meses
Puntos: 2
http://es2.php.net/manual/es/function.eregi.php
__________________
3w.valenciadjs.com
3w.laislatv.com
  #3 (permalink)  
Antiguo 17/09/2005, 05:16
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 13 años, 7 meses
Puntos: 0
Vale pero cómo sería el código para esa función??

Meto todos los nombre de Grupos de la BD en un array y las webs en otro y voy comparando la variable $gruposarray[$i] con el texto de la noticia por ejemplo y si encuentra coincidencia, que reemplace el nombre con el <a href...>$linksarray[$i]</a> Pero cómo se haría con expresiones regulares, sabiendo que el texto en el que quiero buscar grupos para reemplazar es $texto???
  #4 (permalink)  
Antiguo 08/10/2005, 14:31
 
Fecha de Ingreso: agosto-2005
Ubicación: Valencia
Mensajes: 76
Antigüedad: 12 años, 3 meses
Puntos: 1
Si expones mejor te podre ayudar
__________________
Quien a buen árbol se arrima, buena sombra le cobija. :aplauso:

http://dbtrucos.com
  #5 (permalink)  
Antiguo 08/10/2005, 18:58
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 13 años, 7 meses
Puntos: 0
Exponer mejor? Veamos con un ejemplo práctico.
------------------------------------------------
base de datos, tabla GRUPOS:

ID NOMBRE WEB
1 Grupo1 web1
2 Grupo2 web2
3 Grupo3 web3
.. .. ..
n Grupon webn

Texto Original:

El 15 de Noviembre el Grupo3 va a sacar un disco que contendrá 15 nuevas canciones y además irá acompañado de un dvd de regalo. Será distribuido por Loca Records y el precio oficial serán 12 euros.
------------------------------------------------------------
Imaginemos que el Texto Original se encuentra en la variable $TEXOrig.
Lo que quiero es mediante php (creo que expresiones regulares es lo mejor) conseguir un Texto a partir del TEXOrig del tipo:

Texto Nuevo:
El 15 de Noviembre el <a href="verg.php?id=3">Grupo3</a> va a sacar un disco que contendrá 15 nuevas canciones y además irá acompañado de un dvd de regalo. Será distribuido por Loca Records y el precio oficial serán 12 euros.

O sea, reemplazar los Grupos que se encuentren en un Texto, por un enlace a una dirección web del tipo verg.php?id=IDGrupo buscando por todos los Grupos de la Base de Datos en un texto que puede contener X Grupos.

Creo que la idea es bastante clara, luego ya con esa expresión original puedo ir usándola para más cosas parecidas, del tipo cambiar Nombres de Disco por otra dirección cualquiera, etc., pero no sé esa expresión básica que necesitaría...
  #6 (permalink)  
Antiguo 08/10/2005, 20:23
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 12 años, 10 meses
Puntos: 20
Muy sencillo

Haces la llamada a la base de datos, que podría ser algo así:

Código PHP:
 <?
include ("config.php");

$query "SELECT * from grupos where nombre = 'grupo 3' limit 1";
$result =  mysql_db_query ($dbname$query$link);
while (
$row mysql_fetch_array ($result)) {
    
?>

Y lo ponemos dentro del HTML:
Código:
<a href="verg.php?id=3"><?printf($row['nombre']);?></a>

Cerramos el "while":

Código PHP:
<? ?>


Espero haber sido de ayuda
Salu2
  #7 (permalink)  
Antiguo 09/10/2005, 03:40
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
apañero, por favor evita abrir temas repetidos. Han sido unidos los dos temas donde haces la misma consulta.

Ahora, si tienes en la BD lo que será la dirección del sitio que corresponde a cada grupo no necesitas usar expresiones regulares. Mejor hacer la sustitución directa usando la función str_replace(), solo guarda los datos extraidos de la BD en un array. El uso de esta fucnión ybastantes ejemplos de su uso lo encuentras en la documentación oficial además hay varias FAQ que te podrán servir; busca los temas de BBcode y/o etiquetas personales.

Suerte .
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #8 (permalink)  
Antiguo 09/10/2005, 04:09
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 13 años, 7 meses
Puntos: 0
ok gracias a los 2.
david_M_G creo que no me entendiste bien, el tema es que tengo textos diferentes en los que pueden aparecer Grupos diferentes y varios a la vez, y lo que quiero es reemplazar en esos textos los nombres de los grupos por una cadena del tipo <a href="verg.php?id=IDGRUPO"><GrupoX></a> donde IDGRUPO es la ID del Grupo cogida de la BD.

Probaré como dice jam1138 guardando todos los datos de los Grupos en un array y usando str_replace() en un bucle a ver si lo consigo :P
  #9 (permalink)  
Antiguo 09/10/2005, 04:30
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Cita:
lo que quiero es reemplazar en esos textos los nombres de los grupos por una cadena del tipo <a href="verg.php?id=IDGRUPO"><GrupoX></a>
... lo puedes hacer... pero, si me permites sugerirlo, no lo hagas: implica el crear otro archivo (verg.php) que hará tendrá que hacer el proceso de conexión, consulta y retornar un resultado... bien puedes ahorrate todo ese proceso manejando el enlace directo de la forma <a href="pag_grupo"> Grupo </a>... además del tema de los buscadores y demás....

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"

Última edición por jam1138; 09/10/2005 a las 04:37
  #10 (permalink)  
Antiguo 09/10/2005, 08:21
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 13 años, 7 meses
Puntos: 0
esque ya tengo ese archivo verg.php?... y me va muy bien, lo único es cierto lo que dices de los buscadores, pero bueno, ahorro el tener muchos archivos html y el que si modifico algo pues lo modifico en un sólo archivo.

Volviendo a lo mío, decía de usar expresiones regulares por el tema de mayúsculas y minúsculas o incluso de espacios entre palabras, porque cómo hago con str_replace que reemplace el nombre del grupo tanto si sale en mayúsculas como en minúsculas (la primera letra o otras letras)?? Y si además por lo que sea, en vez de salir "Los Panchos" sale "Los Panchos" (con 2 espacios seguidos entre palabras)??

ej: Los Panchos
Debería sustituirse en un texto en el que apareciese el nombre "los panchos" o "Los panchos" o "los Panchos"...

Última edición por apañero; 09/10/2005 a las 10:18
  #11 (permalink)  
Antiguo 09/10/2005, 13:02
Avatar de DvD AdN  
Fecha de Ingreso: mayo-2005
Ubicación: Frente al monitor
Mensajes: 610
Antigüedad: 12 años, 7 meses
Puntos: 0
Cita:
cómo hago con str_replace que reemplace el nombre del grupo tanto si sale en mayúsculas como en minúsculas
Usa str_ireplace();

__________________
Keep f***ing learning
Ask for f***ing help.
Use f***ing spell check.
Think about all the f***ing possibilities.
  #12 (permalink)  
Antiguo 09/10/2005, 18:20
 
Fecha de Ingreso: agosto-2004
Mensajes: 95
Antigüedad: 13 años, 3 meses
Puntos: 2
De acuerdo

Aqui puse dos formas de hacerlo

http://www.forosdelweb.com/f18/autolinkear-palabras-texto-340339/
__________________
Marco de Arica (Chile)
  #13 (permalink)  
Antiguo 09/10/2005, 19:08
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 13 años, 7 meses
Puntos: 0
ok muchas gracias, ese ejemplo es muy aclarador y útil
Creo que usaré preg_replace aunque tarde más, ya que me parece más claro :P
  #14 (permalink)  
Antiguo 09/10/2005, 21:36
 
Fecha de Ingreso: agosto-2004
Mensajes: 95
Antigüedad: 13 años, 3 meses
Puntos: 2
Cita:
Iniciado por apañero
ok muchas gracias, ese ejemplo es muy aclarador y útil
Creo que usaré preg_replace aunque tarde más, ya que me parece más claro :P

Yo use preg_replace y no str_replace

porque yo queria solo reemplazar palabras completas ejemplo ..quiero reemplazar la palabra "auto" ..y no quiero que se reemplaze en "automatico"
__________________
Marco de Arica (Chile)
  #15 (permalink)  
Antiguo 10/10/2005, 19:03
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 13 años, 7 meses
Puntos: 0
no sé qué hago mal pero no me funciona, no da error pero parece que no reemplaza:

Código:
$n=1;
while($Res = mysql_fetch_array($result)){
     if($Res["web"]!=""){
       $Grupo = $Res["G_Nombre"];
       $Grupos[$n] = '/\b($Grupo)\b/is';
       $web = $Res["web"];
       $webs[$n] = '<a target="_blank" href="$web">$Grupo</a>';
       $n++;
     }
    }
    $content=preg_replace($Grupos, $webs, $content);
  #16 (permalink)  
Antiguo 10/10/2005, 21:03
 
Fecha de Ingreso: agosto-2004
Mensajes: 95
Antigüedad: 13 años, 3 meses
Puntos: 2
Cita:
Iniciado por apañero
no sé qué hago mal pero no me funciona, no da error pero parece que no reemplaza:

Código:
$n=1;
while($Res = mysql_fetch_array($result)){
     if($Res["web"]!=""){
       $Grupo = $Res["G_Nombre"];
       $Grupos[$n] = '/\b($Grupo)\b/is';
       $web = $Res["web"];
       $webs[$n] = '<a target="_blank" href="$web">$Grupo</a>';
       $n++;
     }
    }
    $content=preg_replace($Grupos, $webs, $content);
El Problema son las comillas simples.. debes ponerlo con comillas dobles para que php te interprete el contenido... en este caso necesitamos que me interperete la variable $Grupo si pones comillas simples, lo que esta dntro no sera interpretado...

debe quedar asi

Código PHP:
 $Grupos[$n] = "/\b($Grupo)\b/is"
Código PHP:
 $webs[$n] = "<a target='_blank' href='$web'>$1</a>"
utiliza $1 en vez $grupo en
Código PHP:
"<a target='_blank' href='$web'>$Grupo</a>"
asi

Código PHP:
"<a target='_blank' href='$web'>$1</a>"
ya que si quieres buscar una palabra y la encuentras en mayusculas .. debes dejarla en mayusculas ..o sea como esta pero con link ($1) de lo contrario (como lo tienes tu en estos momentos) cambiara la palabra lo cual no quieres ...solo queremos ponerle el link

ejemplo

"Grupo ABC lanza su nuevo disco"

y quiero autolinkear ABC pero yo tengo definido en mi BD "abc" (minusculas) con el link "http://www.abc.cl"

como lo tienes tu te quedaria con minusculas ..
"Grupo abc lanza su nuevo disco";

pero si pones $1 te quedará igual como el original pero con link

"Grupo ABC lanza su nuevo disco";

hechale un vistazo a esto

================================================== ==============

Las comillas simples muestran el contenido tal y como lo hemos escrito.

Las comillas dobles parsean nuestra cadena en busca de posibles variables a interpretar por PHP.

FAQ del echo

http://www.webtaller.com/construccio.../faqecho-4.php
__________________
Marco de Arica (Chile)

Última edición por marcomartinez; 10/10/2005 a las 21:09
  #17 (permalink)  
Antiguo 11/10/2005, 04:14
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 13 años, 7 meses
Puntos: 0
perfecto profe, entendido y funcionando XD

muchas graciasss
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 22:38.