Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Skeletron en 2 Junio 2010, 12:45 pm



Título: Todos, menos 1 caracter en REGEX
Publicado por: Skeletron en 2 Junio 2010, 12:45 pm
Hola gente.
Resulta que estoy modificando un .htaccesses, hago algo así como una redireccion y demas.
Pero en un lugar, necesito "continuar" siempre y cuando, haya cualquier cosa, MENOS una barra.. o sea, llegada la barra, terminar de tomar los datos.

Por ahí leí que [^5] <<< esto hace que continue hasta un 5...

Entonces, ([^/]) << deberia funcionar.. PERO NO FUNCIONA...

Alguien sabe como hacerlo?


Título: Re: Todos, menos 1 caracter en REGEX
Publicado por: ~ Yoya ~ en 2 Junio 2010, 16:04 pm
Esta:
Código:
([a-z0-9]+)\/?
Continua hasta /

O si quieres terminar en / pero también incluirla:
Código:
(\w+(?:\/?))


Título: Re: Todos, menos 1 caracter en REGEX
Publicado por: raul338 en 2 Junio 2010, 16:56 pm
Era cuestion de poner un simple cuantificador :)

Código:
([^/]+)


Título: Re: Todos, menos 1 caracter en REGEX
Publicado por: Skeletron en 2 Junio 2010, 20:20 pm
Era cuestion de poner un simple cuantificador :)

Código:
([^/]+)
Vos sabes que, yo tambien lo probé así... y tambien sacandole los corchetes.. pero no funciona.
La direccion:
http://localhost:8084/aaAA.AAaa
No funciona.
Es como que no estuviese funcionando bien... o yo la implemento mal (no creo, porque es muy corto el regex).

Rewriterule ^([^/]+)$ index.php?x=$1 [L]

Esa es la implementacion que estoy haciendo.
Se supone que tendría que guardar a $1, todo lo que hay despues de la barra del .com, HASTA una "/".. o si no la hay, mejor.

Sim embargo, puedo hacer así:
Rewriterule ^([a-zA-Z_-]+)/?$ index.php?x=$1 [L]
Que me toma todo lo que haya despues de la barra, siempre y cuando esas cosas sean:
a-z
A-Z
-
_

(los 2 anteriores es: _ y -)
Pero si me llega por parametro un PUNTO en la url, no lo toma.. pero si se lo agrego con |. por ejemplo:
Rewriterule ^([a-zA-Z_-\.]+)/?$ index.php?x=$1 [L]
o si pruebo con una coma
Rewriterule ^([a-zA-Z_-,]+)/?$ index.php?x=$1 [L]
Da error... no lo toma.

Tendré que "escribir" en el regex varios "OR"?


Título: Re: Todos, menos 1 caracter en REGEX
Publicado por: raul338 en 3 Junio 2010, 01:30 am
Mira, nunca toque apache, asi que no puedo probar ahora :P

Era cuestion de poner un simple cuantificador :)

Código:
([^/]+)
Vos sabes que, yo tambien lo probé así... y tambien sacandole los corchetes.. pero no funciona.
La direccion:
http://localhost:8084/aaAA.AAaa
No funciona.
Es como que no estuviese funcionando bien... o yo la implemento mal (no creo, porque es muy corto el regex).

Rewriterule ^([^/]+)$ index.php?x=$1 [L]

Eso es por que esa expresion regular es muy generica, planteemos:

^([^/]+)$ aplicado a http://localhost:8084/aaAA.AAaa devuelve 3 cosas:
http:
localhost:8084
aaAA.AAaa

y vos asignando el 1 estas asignando

index.php?x=http: (creo)

Se entiende? La expresion regular funciona, solo que tenes que limitar un poco mas:
Código:
(?:http://)?[^/]+/([^/]+)

Explicado seria:
Código:
(?:http://)?            HTTP, opcional, el protocolo puede estar
[^/]+/                   vendria a ser el dominio y la "/" barra
([^/]+)                 lo que sea despues de la barra :)


Otra cosa!, yo probaria quitando el inicio y fin de linea "^$"