Exprecion regular.. letras-numero guines y guines bajos..

Iniciado por Kase, 20 Agosto 2011, 09:52 AM

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

Kase

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..

Darkgold9

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*


Kase

Cita de: Darkgold9 en 20 Agosto 2011, 10:15 AM
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!

Valkyr

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í:

(\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.

raul338

Yo lo haría así mas fácil (para no caer en la recursividad de grupos)

^\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

Valkyr

Cita de: raul338 en 22 Agosto 2011, 16:57 PM
Yo lo haría así mas fácil (para no caer en la recursividad de grupos)

^\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.

Kase

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

raul338

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 :)