Foros del Web » Programando para Internet » PHP »

Marcar palabras de una cadena

Estas en el tema de Marcar palabras de una cadena en el foro de PHP en Foros del Web. Hola En el caso que muestro se marca únicamente todas las coincidencias con la última palabra que busco. Busco dos palabras ( marcar y palabras ...
  #1 (permalink)  
Antiguo 31/12/2009, 08:20
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 3 meses
Puntos: 126
Marcar palabras de una cadena

Hola

En el caso que muestro se marca únicamente todas las coincidencias con la última palabra que busco. Busco dos palabras (marcar y palabras) y solamente se marca palabras

Código PHP:
Ver original
  1. <head>
  2. <title></title>
  3. <style type="text/css">
  4. <!--
  5. .texto {
  6.    background-color: #F0F0F0;
  7.    font-family:Verdana;
  8.    color: navy;
  9.    font-size: 10px;
  10.    text-align:left;
  11. }
  12. td subC0
  13. {
  14.     background-color: #C0FF3E;
  15. }
  16. td subC1
  17. {
  18.     background-color: #FFFF00;
  19. }
  20. td subC2
  21. {
  22.     background-color: #00FFFF;
  23. }
  24. td subC3
  25. {
  26.     background-color: #7FFFD4;
  27. }
  28. td subC4
  29. {
  30.     background-color: #FFC0CB;
  31. }
  32. td subC5
  33. {
  34.     background-color: #FFBBFF;
  35. }
  36. td subC6
  37. {
  38.     background-color: #FFD700;
  39. }
  40. td subC7
  41. {
  42.     background-color: #BBFFFF;
  43. }
  44. td subC8
  45. {
  46.     background-color: #FF7F00;
  47. }
  48. td subC9
  49. {
  50.     background-color: #FFE4C4;
  51. }
  52. -->
  53. </style>
  54. </head>
  55. <body>
  56. <table bgcolor="navy" border="0" cellspadding="0" cellspacing="1px">
  57. <tr height="40px">
  58. <td class="texto">
  59. <?php
  60. //$cad = stripslashes($_GET["t"]);
  61. //$cad = strip_tags($cad);
  62. $cad = "marcar-palabras";
  63. $array_cadena  = explode("-",$cad);
  64. $strOriginal = "Esto es un ejemplo para desMARCAR las palabras? que quiero marcar, acorde a las 'palabras' que ....";
  65.  for ($i=0; $i<sizeof($array_cadena); $i++){
  66.   $patron = "/\b($array_cadena[$i])+\b|\b([des|il|in|im|ir|un|non]+)\B($array_cadena[$i]+\b)|(\b$array_cadena[$i][ed|er|ing|s|es|ful|less|dom|ship|ness|hood|ty|ance|ment|ly|ally|fuly|est|]+\b)/i";
  67.   $reemplazo = "<subC".$i.">$1$2$3$4</subC".$i.">";
  68.   $strMarcado = preg_replace($patron, $reemplazo , $strOriginal);
  69.  }
  70. echo $strMarcado;
  71. ?>
  72. </td>
  73. </tr>
  74. </table>
  75. </body>
  76. </html>
  77. </body>
  78. </html>

¿Qué he de hacer para que sean marcadas ambas palabras? ya que con ambas hay coincidencias

Gracias
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #2 (permalink)  
Antiguo 31/12/2009, 08:22
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Marcar palabras de una cadena

al patron agregale una s final despues de la i
__________________
More about me...
~ @rhyudek1
~ Github
  #3 (permalink)  
Antiguo 01/01/2010, 09:20
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 3 meses
Puntos: 126
Respuesta: Marcar palabras de una cadena

Hola y gracias por responder

Creo que no me expliqué bien.
Esto es lo que está ocurriendo

Esto es un ejemplo para desMARCAR las palabras? que quiero marcar, acorde a las 'palabras' que ....

Y esto es lo que quiero que ocurra

Esto es un ejemplo para desMARCAR las palabras? que quiero marcar, acorde a las 'palabras' que ....

Quiero que se marquen las coincidencias con ambos terminos de busqueda, no únicamente el último
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #4 (permalink)  
Antiguo 04/01/2010, 14:41
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 3 meses
Puntos: 126
Respuesta: Marcar palabras de una cadena

Bueno dejo la solución que se me ha ocurrido, por si a alguien le puede ayudar

Código PHP:
Ver original
  1. $patron = Array();
  2. $reemplazo = Array();
  3. //$cad = stripslashes($_GET["t"]);
  4. //$cad = strip_tags($cad);
  5. $cad = "marcar-palabras";
  6. $array_cadena  = explode("-",$cad);
  7. $strOriginal = "Esto es un ejemplo para desMARCAR las palabras? que quiero marcar, acorde a las 'palabras' que ....";
  8. for ($i=0; $i<sizeof($array_cadena); $i++){
  9.  
  10. array_push($patron, "/\b($array_cadena[$i])+\b|\b([des|il|in|im|ir|un|non]+)\B($array_cadena[$i]+\b)|\b($array_cadena[$i]+)\B([ed|er|ing|s|es|ful|less|dom|ship|ness|hood|ty|ance|ment|ly|ally|fuly|est|]+\b)/i");
  11. array_push($reemplazo, "<subC$i>$1$2$3$4$5</subC$i>");  
  12. }
  13. ksort($patron);
  14. ksort($reemplazo);
  15. echo preg_replace($patron, $reemplazo, $strOriginal);

Gracias por vuestro interes y tiempo
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 00:42.