Foros del Web » Programando para Internet » PHP »

Negación en Expresiones Regulares

Estas en el tema de Negación en Expresiones Regulares en el foro de PHP en Foros del Web. Buenas con todos tengo el siguiente problema. deseo redireccionar todas las urls de este tipo /weblog/2010/07/zro a /weblog/2010/07/zro.html y mi expresion regulare con subpatrones es ...
  #1 (permalink)  
Antiguo 10/07/2010, 10:23
 
Fecha de Ingreso: octubre-2007
Mensajes: 21
Antigüedad: 17 años
Puntos: 0
Negación en Expresiones Regulares

Buenas con todos tengo el siguiente problema.

deseo redireccionar todas las urls de este tipo

/weblog/2010/07/zro

a

/weblog/2010/07/zro.html

y mi expresion regulare con subpatrones es

---------------------
%^weblog/(?P<year>[1,2]\d{3})/(?P<month>\d{2})/(?P<slug>[^/]+)(?:/page/(?P<page>\d+)?)$%i
---------------------------
weblog/{$year}/{$month}/{$slug}(page/{$page}/)
----------

el problema esta en que hace 2 redirecciones

/weblog/2010/07/zro a
/weblog/2010/07/zro.html y despues
/weblog/$year}/{$month}/{$slug}.html

quiero encontrar la expresion regular el que solo capte las url sin terminar con .html

es decir que solo sean validas las urls de este tipo /weblog/2010/07/zro
mas no /weblog/2010/07/zro.html

he probado con [^.html] en el slug (?P<slug>[^.html]+) pero lo unico que consigo es que valide pero quitandole el .html

Gracias de antemano
  #2 (permalink)  
Antiguo 10/07/2010, 10:57
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Negación en Expresiones Regulares

lee lo siguiente:
http://www.forosdelweb.com/f18/aport...s-pcre-646110/

debes usar (?!...)
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 10/07/2010, 11:34
 
Fecha de Ingreso: octubre-2007
Mensajes: 21
Antigüedad: 17 años
Puntos: 0
Respuesta: Negación en Expresiones Regulares

Hola gracias por el apunte pero ya lo habia probado con (?!html) eh igual

asi %^weblog/(?P<year>[1,2]\d{3})/(?P<month>\d{2})/(?P<slug>(?!html))(?:/page/(?P<page>\d+)?)$%i

y sigue haciendo lo mismo el de validar pero quitandole el .html
  #4 (permalink)  
Antiguo 10/07/2010, 12:27
rpv
 
Fecha de Ingreso: febrero-2010
Mensajes: 275
Antigüedad: 14 años, 9 meses
Puntos: 10
Respuesta: Negación en Expresiones Regulares

Este tipo de redirecciones es mejor hacerlas desde apache.

En PHP podría ser algo así:

Código PHP:
Ver original
  1. $str='/weblog/2010/07/zro';
  2.  
  3. if(preg_match('/^\/weblog\/([0-9]{4})\/([0-9]{2})\/([a-z0-9\-]+)$/i',$str,$res)){
  4.     header('Location: '.$res[0].'.html');
  5.     die;
  6. }

Etiquetas: expresiones, regulares
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 21:37.