Foros del Web » Programando para Internet » PHP »

Ayuda con expresión regular

Estas en el tema de Ayuda con expresión regular en el foro de PHP en Foros del Web. Buenas a todos Estoy intentando hacer una expresión regular que me modifique cierta palabra en todo un fichero, pero ignorando dicha palabra si está entre ...
  #1 (permalink)  
Antiguo 20/09/2010, 07:29
Avatar de Kamae  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona (Catalunya)
Mensajes: 307
Antigüedad: 16 años
Puntos: 13
Ayuda con expresión regular

Buenas a todos

Estoy intentando hacer una expresión regular que me modifique cierta palabra en todo un fichero, pero ignorando dicha palabra si está entre < > (eso incluye código PHP y HTML)

Código PHP:
// Esto ignora las etiquetas HTML y PHP
$output preg_replace("/(>|^)([^<]+)(?=<|$)/esx""'\\1' . str_replace('" $buscar "', '<span style=\"background-color:#FF0\">" $buscar "</span>', '\\2')"$buffer); 
El problema es que sí me coge lo que hay entre las etiquetas title y me gustaría ignorarlo también. Es lo único que no consigo. He probado a añadir varias posibilidades y ninguna funciona, me he leído nosecuántos tutoriales de expresiones regulares pero parece ser que no lo acabo de pillar xD

Código PHP:
   // Que no sea </title> y final de línea... No funciona
/([</title>$])(>|^)([^<]+)(?=<|$)/esx

   
// Que esté después del <body>... No funciona
/(<body>w)(>|^)([^<]+)(?=<|$)/esx 
Etc etc, he probado con *, con ?, con \w, con [a-zA-Z]...

Alguien me puede ayudar?
Gracias de antemano!
  #2 (permalink)  
Antiguo 20/09/2010, 10:35
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Ayuda con expresión regular

te invito a leer lo siguiente:
http://www.forosdelweb.com/f18/aport...s-pcre-646110/
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 21/09/2010, 05:42
Avatar de Kamae  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona (Catalunya)
Mensajes: 307
Antigüedad: 16 años
Puntos: 13
Respuesta: Ayuda con expresión regular

Gracias por la respuesta y el aporte, me ha resuelto alguna duda aunque sigo sin pillarlo... Con tu hilo y con el de la wikipedia intento entender mi expresión regular:

Primer paréntesis, (>|^)
Si hay un cierre de HTML ( > ) o bien empieza la línea

Segundo paréntesis, ([^<]+)
¿CREO que si va entre corchetes en este caso es una negación? Le dice que si NO empieza la línea con apertura de HTML ( < )

Tercer paréntesis, (?=<|$)
Se supone que ?= es "mirar adelante", y a continuacin hay un <|$ lo cuál significa "hasta < o final de palabra o línea".
Por lo tanto no seguirá si empiezan etiquetas HTML o se acaba la palabra o la línea.

Después de los patrones, no sé por qué en mi código hay str_replace dentro del preg_replace entre medio de un \\1 y un \\2 (que según tengo entendido se refiere a los dos primeros paréntesis de mi patrón, aunque el \\3 no lo pone en ningún lado...). Debo suponer que entonces hace el reemplazo cuando la palabra que busco está entre \\1 ( > o inicio de línea ) y el \\2 ( < o final de palabra o línea ).

Código PHP:
Aunque toda mi lectura fuera correcta (lo cual dudo),
sigo sin saber anyadir lo de que no sea "<title>yloquevenga"...
Deberia ponerlo entre los parentesis 1 y 2?
Despues del 3r parentesis?
La instruccion seria algo asi como (?<!<title>.*$)   ?
(
Mirar atras ?<!  , que no haya <titleni a continuacion
mas texto y 
final de linea
Finalmente tiré de un explode("<body") y le pasé el buffer de todo lo que viene después del body, aunque me gustaría haberlo sabido hacer con expresiones regulares.

Última edición por Kamae; 21/09/2010 a las 07:18
  #4 (permalink)  
Antiguo 21/09/2010, 09:38
Avatar de quike88  
Fecha de Ingreso: agosto-2008
Mensajes: 471
Antigüedad: 15 años, 8 meses
Puntos: 87
Respuesta: Ayuda con expresión regular

creo que algo así funcionaria:

Código PHP:
Ver original
  1. $output = preg_replace("/(>|^)(?<!<title>)([^<]+)(?=<|$)/esx", "'\\1' . str_replace('" . $buscar . "', '<span style=\"background-color:#FF0\">" . $buscar . "</span>', '\\2')", $buffer);

Última edición por quike88; 21/09/2010 a las 09:47

Etiquetas: regular
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:36.