Todos, menos 1 caracter en REGEX

Iniciado por Skeletron, 2 Junio 2010, 12:45 PM

0 Miembros y 1 Visitante están viendo este tema.

Skeletron

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?

~ Yoya ~

Esta:
([a-z0-9]+)\/?
Continua hasta /

O si quieres terminar en / pero también incluirla:
(\w+(?:\/?))
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

raul338

Era cuestion de poner un simple cuantificador :)

([^/]+)

Skeletron

Cita de: raul338 en  2 Junio 2010, 16:56 PM
Era cuestion de poner un simple cuantificador :)

([^/]+)
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"?

raul338

Mira, nunca toque apache, asi que no puedo probar ahora :P

Cita de: Skeletron en  2 Junio 2010, 20:20 PM
Cita de: raul338 en  2 Junio 2010, 16:56 PM
Era cuestion de poner un simple cuantificador :)

([^/]+)
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:

(?:http://)?[^/]+/([^/]+)


Explicado seria:

(?: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 "^$"