Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: Kase en 20 Agosto 2011, 09:52 am



Título: Exprecion regular.. letras-numero guines y guines bajos..
Publicado por: Kase en 20 Agosto 2011, 09:52 am
pues eso... no  consigo esta exprecion reguntar...

segun yo deberia ser

\w*-*_*

y devieria poder leer frases como

hola-mundo

hola_o__o

no-tengo_nada_ke-decir

sin embargo no me funciona D=

el error es cono los -   si tienen una letra despues de el guion me causa error..


Título: Re: Exprecion regular.. letras-numero guines y guines bajos..
Publicado por: Darkgold9 en 20 Agosto 2011, 10:15 am
Citar
\w*-*_*

Con eso solo consigues una cadena seguida de guiones y de guiones bajos, ejemplo: holaquetal----___ , hola-_, hola etc

Si quieres añadir caracteres entre los guiones tendrias que poner:

\w*-*\w*_*\w*



Título: Re: Exprecion regular.. letras-numero guines y guines bajos..
Publicado por: Kase en 20 Agosto 2011, 18:45 pm
Con eso solo consigues una cadena seguida de guiones y de guiones bajos, ejemplo: holaquetal----___ , hola-_, hola etc

Si quieres añadir caracteres entre los guiones tendrias que poner:

\w*-*\w*_*\w*



ya lo abia pobado de ese modo...  pero ahora que lo pienso... creo que no le abia puesto  el \  a cada w... x]  me imagino que asi como le expresaste tendra que servir.. gracias!


Título: Re: Exprecion regular.. letras-numero guines y guines bajos..
Publicado por: Valkyr en 22 Agosto 2011, 13:03 pm
Tal y como ha puesto la expresión regular Darkgold9, reconocerías cadenas del tipo:

hola---que___tal?

Sí quieres reconocer cadenas como las que has puesto en el primer post la expresión regular debería ser así:

Código:
(\w+(-|_)*)*\w+

Y te explico un poco el por qué.

Según las cadenas de ejemplo que has puesto, todas deben comenzar por un caracter de \w, por tanto, hay que poner a la fuerza esto: \w+ con eso estamos reconociendo cadenas que contengan una o más letras o dígitos (sí mal no recuerdo \w incluía también los dígitos pero no estoy seguro). A continuación puede venir, o un guión bajo, o un guión normal y corriente, por tanto eso debe expresarse mediante el operador unión |. Por tanto la parte de la expresión: (-|_)* representa las cadenas de guiones y guiones bajos.

Por último todo lo anterior se junta y se le pone un *, para especificar que todo eso debe aparecer cero o más veces. Para terminar se le añade un \w+ para que reconozca las cadenas que terminen con alguna sucesión de \w.

Espero que lo hayas entendido.

Para los próximos posts intenta escribirlos de una forma más limpia y con menos faltas a la hora de escribir.

Saludos y suerte.


Título: Re: Exprecion regular.. letras-numero guines y guines bajos..
Publicado por: raul338 en 22 Agosto 2011, 16:57 pm
Yo lo haría así mas fácil (para no caer en la recursividad de grupos)

Código:
^\w+[\-\_\w]*$

No acepta signos, por lo que no toma "hola---que___tal?" por el "?" al final, si queres agregarlo solo agrega el "?" entre los corchetes :P


Título: Re: Exprecion regular.. letras-numero guines y guines bajos..
Publicado por: Valkyr en 22 Agosto 2011, 18:03 pm
Yo lo haría así mas fácil (para no caer en la recursividad de grupos)

Código:
^\w+[\-\_\w]*$

No acepta signos, por lo que no toma "hola---que___tal?" por el "?" al final, si queres agregarlo solo agrega el "?" entre los corchetes :P

Cierto, mucha mejor expresión que la que se me ocurrió xD. Por otro lado el ejemplo de "hola---que___tal?" se me fue la cabeza al añadir la interrogación jaja.

Saludos.


Título: Re: Exprecion regular.. letras-numero guines y guines bajos..
Publicado por: Kase en 23 Agosto 2011, 06:49 am
al final lo resolvi asi xD

[A-Za-z1-9_-]*


=P  pero muchas gracias por sus soluciones!

ahora que lo pienso,  se podria esto, no?

[\w_-]*

porcierto el  ^ al principio y el $ al final es para indicar que es una exprecion regular?  seme hace raro por que donde las estoy utilizando (en django)  tube que quitarle esos signos para que funcionara


Título: Re: Exprecion regular.. letras-numero guines y guines bajos..
Publicado por: raul338 en 23 Agosto 2011, 14:38 pm
no, el "^" indica principo de linea, el "$" indica fin de linea :) es porque si pones "????##@a_" te lo toma como valido usando tu expresion regular :)

La diferencia entre tu expresion regular y la que puse yo, es que en la mia si o si tiene que empezar por una letra o numero, en cambio la tuya no. La tuya toma "__hola" como valido :)