Foros del Web » Programando para Internet » PHP »

Ayuda con expresión regular en forma de negación

Estas en el tema de Ayuda con expresión regular en forma de negación en el foro de PHP en Foros del Web. Hola, ando loco intentando crear una expresión regular, pero no doy con ello. Necesito una expresión regular que me capture el carácter ) de cada ...
  #1 (permalink)  
Antiguo 02/06/2010, 07:17
Avatar de RUX
RUX
 
Fecha de Ingreso: enero-2004
Ubicación: Las Palmas de Gran Canari
Mensajes: 566
Antigüedad: 20 años, 3 meses
Puntos: 0
Ayuda con expresión regular en forma de negación

Hola, ando loco intentando crear una expresión regular, pero no doy con ello.

Necesito una expresión regular que me capture el carácter ) de cada línea, siempre y cuando en dicha línea no exista la palabra if

Ejemplo:
Código:
MiFuncion(mensaje)

if (document.layers)
	document.captureEvents(Event.MOUSEOVER | Event.MOUSEOUT)
	document.onmouseover=hidestatus;
El paréntesis en rojo, NO debería de capturarlo, los que están en azul sí.

Muchas gracias de antemano!!!
__________________
Rux.es - Sitio Personal | IslaRock.com - Todo Rock
  #2 (permalink)  
Antiguo 02/06/2010, 07:29
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Ayuda con expresión regular en forma de negación

pero haz intentado algo?

en realidad no es muy dificil lo que necesitas .. usa el modificador m para indicar multilinea
Código PHP:
Ver original
  1. preg_match_all('/^(?!if).*(\)).*$/im', $subject, $result);
  2. $result = $result[1];
__________________
More about me...
~ @rhyudek1
~ Github
  #3 (permalink)  
Antiguo 02/06/2010, 07:39
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Ayuda con expresión regular en forma de negación

Si no me equivoco debería ser :

Código PHP:
Ver original
  1. (?<!if)

Me valgo de esto para decirlo :

Cita:
Observe que el patrón aparentemente similar (?!foo)bar no encuentra una incidencia de "bar" que esté precedida por algo distinto de "foo"; no encuentra ninguna incidencia de "bar" en absoluto, ya que la declaración (?!foo) es siempre TRUE cuando los tres caracteres siguientes son "bar"
Cita:
Por ejemplo, (?<!foo)bar encuentra una incidencia de "bar" que no esté precedida por "foo"
http://cl.php.net/manual/es/regexp.r...assertions.php

Corríjanme si me equivoco, no me gusta hacer el loco .
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #4 (permalink)  
Antiguo 02/06/2010, 07:44
Avatar de RUX
RUX
 
Fecha de Ingreso: enero-2004
Ubicación: Las Palmas de Gran Canari
Mensajes: 566
Antigüedad: 20 años, 3 meses
Puntos: 0
Respuesta: Ayuda con expresión regular en forma de negación

Holaaa!! gracias por contestar:

He usado varias opciones de Lookbehind, pero no me funciona y lo estoy intentando usar con preg_replace, de manera que me añada ; después de los paréntesis azules:

Código:
MiFuncion(mensaje);

if (document.layers)
	document.captureEvents(Event.MOUSEOVER | Event.MOUSEOUT);
	document.onmouseover=hidestatus;[/QUOTE]
Código PHP:
$var preg_replace('/^(?!if).*(\)).*$/im''\\1;'$var); 
Pero creo que no me va!! Gracias
__________________
Rux.es - Sitio Personal | IslaRock.com - Todo Rock
  #5 (permalink)  
Antiguo 02/06/2010, 08:00
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Ayuda con expresión regular en forma de negación

Código PHP:
Ver original
  1. $result = preg_replace('/^((?!if).*?)(\)).*$/im', '\1);', $subject);
__________________
More about me...
~ @rhyudek1
~ Github
  #6 (permalink)  
Antiguo 02/06/2010, 12:13
Avatar de RUX
RUX
 
Fecha de Ingreso: enero-2004
Ubicación: Las Palmas de Gran Canari
Mensajes: 566
Antigüedad: 20 años, 3 meses
Puntos: 0
Respuesta: Ayuda con expresión regular en forma de negación

Hola!!!

Me funciona genial, le he añadido $ despues de (\) y ahora esta mucho mejor
Código PHP:
$result preg_replace('/^((?!if).*?)(\)$).*$/im''\1);'$subject); 
Sin embargo, no funciona si existen espacios a los extremos de las líneas.

Es decir si existe if y este no entra dentro del primer carácter de la línea, lo acabará ignorando, al igual que si termina en ) y después existen espacios en blanco, también lo ignora.

Estoy cerca de dar con la expresión perfecta para mi código !!!.. alguna otra sugerencia???

siempre gracias
__________________
Rux.es - Sitio Personal | IslaRock.com - Todo Rock
  #7 (permalink)  
Antiguo 02/06/2010, 13:05
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Ayuda con expresión regular en forma de negación

Me funciona genial, le he añadido $ despues de (\) y ahora esta mucho mejor

$ termina la linea... si te funciona asi, quita el resto
\s*? con eso agregas cualquier cantidad de espacios
__________________
More about me...
~ @rhyudek1
~ Github
  #8 (permalink)  
Antiguo 02/06/2010, 13:40
Avatar de RUX
RUX
 
Fecha de Ingreso: enero-2004
Ubicación: Las Palmas de Gran Canari
Mensajes: 566
Antigüedad: 20 años, 3 meses
Puntos: 0
De acuerdo Respuesta: Ayuda con expresión regular en forma de negación

Muchas gracias!! solucionado de la siguiente forma:

Código PHP:
$result preg_replace('/^((?!\s*?if).*?)(\)\s*?$)/im''\1);'$result); 
Si aún se puede mejorar, estoy abierto a cualquier aportación.

Muchas gracias Hidek1
__________________
Rux.es - Sitio Personal | IslaRock.com - Todo Rock

Etiquetas: regular, formulario
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:42.