Tema destacado: [AIO elhacker.NET] Compilación herramientas análisis y desinfección malware
Autor
|
Tema: [RETOS] Expresiones Regulares (Leído 2,470 veces)
|
criskapunk
Desconectado
Mensajes: 255
|
Buenas chicos, después de la aprobación de Nov, les traigo este post Reglas: (Más que nada algunas recomendaciones para poder mantener el orden en el hilo). - Los retos se dividirán en tres niveles (Fácil - Medio - Difícil).
- Podrá haber simultáneamente un máximo de UN reto de cada dificultad.
- Cada reto tendrá una duración máxima de 12 horas. Pasado ese tiempo, si no se resuelve, se podrá publicar uno nuevo.
- Una vez que el autor del reto de por válida una respuesta, deberá publicar la propia solución al desafío.
- Se podrán publicar soluciones alternativas a retos antiguos, no hay problema con eso, la idea es practicar.
Acá les dejo el primero, si quieren pueden usar una plantilla similar a la siguiente: Dificultad: 2 - Medio. Reto: Realizar una expresión regular que valide nombres. Los mismos podrán ser simples o compuestos (Una o dos palabras). Unicamente podrán contener letras y las letras mayúsculas podrán aparecer sólo al principio de las palabras. Cuando llego a casa publico la respuesta, que ya terminó mi horario laboral xD. Un saludo y espero que les guste! 
|
|
|
|
« Última modificación: 23 Agosto 2011, 23:00 por R0LFback »
|
En línea
|
|
|
|
Darkgold9
Desconectado
Mensajes: 63
|
([A-Z]?[a-záéíóú]*) | ([A-Z]?[a-záéíóú]*\S [A-Z]?[a-záéíóú]*)
Aqui sta mi propuesta. Saludos
|
|
|
|
« Última modificación: 23 Agosto 2011, 23:42 por Darkgold9 »
|
En línea
|
|
|
|
criskapunk
Desconectado
Mensajes: 255
|
Yo la había pensado así: ^[a-zA-Z]?[a-z]+(\s[a-zA-Z]?[a-z]+)? Pero por ejemplo, la mía no valida tildes y acepta como valido palabras de una sola letra. Voy a tener que ser más específico para la próxima @Darkgold9Tu expresión (Según esta página) valida una única palabra solo si al final de la misma agregás un espacio. Además, no valida más de una palabra y toma como correcto escribir únicamente un espacio. Un saludo y gracias por participar.
|
|
|
|
|
En línea
|
|
|
|
Shell Root
Desconectado
Mensajes: 2.456
Alex Jurado
|
$sExpReg = '/^([a-záéíóúA-ZÁÉÍÓÚ]|(\s))*$/'; @R0LFback, para qué el operador ? en tu expresión?
|
|
|
|
|
En línea
|
 ---
|
|
|
criskapunk
Desconectado
Mensajes: 255
|
@Shell Root: Porque la segunda palabra puede o no estar. Te referís a ese o al ? del comienzo? Tu expresión supera el límite de dos palabras  Además acepta como válido solo espacios en blanco. Un saludo.
|
|
|
|
|
En línea
|
|
|
|
Shell Root
Desconectado
Mensajes: 2.456
Alex Jurado
|
Hay nombres con espacios vacíos, -es mentiras, ajajjaja este no es mi fuerte-
La primera, se supone qué al usar [a-zA-Z] se puede ingresar una mayúscula o minúscula.
|
|
|
|
|
En línea
|
 ---
|
|
|
criskapunk
Desconectado
Mensajes: 255
|
Jaja! Un nombre escrito en WhitespaceLo del ? es por esto que puse en el primer post: las letras mayúsculas podrán aparecer sólo al principio de las palabras Pueden aparecer o no. Un saludo.
|
|
|
|
|
En línea
|
|
|
|
Shell Root
Desconectado
Mensajes: 2.456
Alex Jurado
|
Al parecer no entiendes lo que te quiero decir, intetad ejecutar lo siguiente, ^[a-zA-Z]+(\s[a-zA-Z]?[a-z]+)?
|
|
|
|
|
En línea
|
 ---
|
|
|
Valkyr
Desconectado
Mensajes: 632
Divide y vencerás
|
Yo propondría esta: [A-Z]?[a-z]+( [A-Z]?[a-z]+)? Reconoce nombres que empiecen por mayúsculas y pueden tener uno o dos nombres, y además los que empiecen por minúsculas. Saludos.
|
|
|
|
|
En línea
|
|
|
|
Shell Root
Desconectado
Mensajes: 2.456
Alex Jurado
|
@Valkyr, faltan las tildes, para nombres como Héctor. ^[A-ÁÉÍÓÚa-záéíóúA]+( [A-ZÁÉÍÓÚa-záéíóúA]+)$
|
|
|
|
« Última modificación: 24 Agosto 2011, 04:42 por Shell Root »
|
En línea
|
 ---
|
|
|
criskapunk
Desconectado
Mensajes: 255
|
@Shell Root: Esa expresión permite en la primer palabra que todas las letras sean mayúsculas. Solo pueden ir al principio de cada una. @Valkyr: Funciona perfecto  Cumple con los requisitos que puse en el primer post. Te toca postear reto. Un saludo.
|
|
|
|
|
En línea
|
|
|
|
Valkyr
Desconectado
Mensajes: 632
Divide y vencerás
|
Shell Root, no puse tildes porque en el primer post no especificaba que los nombres pudiesen llevar tildes, sí quisiesemos que la expresión regular reconociese muchos más nombres habría que hacer exactamente lo que dices. De acuerdo, pues yo propongo este: Expresión regular para buscar cadenas que vayan entre comillas, sin comillas dentro y que puedan ocupar varias líneas.Tendría que reconocer las siguientes cadenas (las que están subrayadas): " Hola señores" "Comillas comillas y comillas" " "
"Reto de expresiones
regulares elhacker.net " Iré revisando las respuestas para ver qué proponeis. Yo ya tengo la mía hecha, cuando alguien proponga alguna que lo resuelva posteo la mia. Saludos.
|
|
|
|
|
En línea
|
|
|
|
Darkgold9
Desconectado
Mensajes: 63
|
(\"[^\"]*\")+
Aki va la mia Saludos
|
|
|
|
|
En línea
|
|
|
|
criskapunk
Desconectado
Mensajes: 255
|
^"[\w?\s?(\r\n)?]*"$ Edit: Me compliqué demasiado parece  No sabía que había que escapar las comillas, por eso no me funcionaba la expresión. Un saludo.
|
|
|
|
« Última modificación: 24 Agosto 2011, 16:49 por R0LFback »
|
En línea
|
|
|
|
Valkyr
Desconectado
Mensajes: 632
Divide y vencerás
|
Darkgold9 la tuya funciona perfectamente, lo único que puedo poner de pega es que la barra de escape no es necesaria, sería necesaria si por ejemplo estuviésemos programando y al crear una cadena de texto esa cadena contuviese comillas dentro, pero para las expresiones regulares como tal, no es necesario, aún así funciona correctamente. Te paso el testigo y te toca reto xD.
R0LFback la que propones no es correcta. Me parece que sobran las ?, además, al colocar el paréntesis lo toma como el carácter que es, no como un conjunto. Tampoco reconoce los que están en varías líneas.
Saludos a todos.
|
|
|
|
|
En línea
|
|
|
|
|
|