Retos de Expresiones Regulares

Iniciado por ~ Yoya ~, 3 Octubre 2010, 17:02 PM

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

~ Yoya ~

Buenas a todos, todavía no he visto el primer reto de expresiones regulares...
Las reglas:

  • Se permite cualquier lenguaje de programación que utilice expresiones regulares (preferiblemente scripting, ya que la mayoría conoce por lo menos 1)
  • Cuando se plantea un reto mas, el usuario que respondió al reto deberá explicar la expresión que utilizo, así los demás aprenden xD (opcional)
  • Si nadie responde al reto, el auto deberá autor responderse he iniciar un nuevo reto
  • El que realiza el reto puede poner condiciones para realizar el reto, ejemplo: prohibiendo el uso de modificadores
  • Los usuarios pueden descartar las expresiones planteada para resolver un reto si esta no puede funcionar bien en todos los casos

Bueno un reto facil, para empezar XD

Reto #1
Objetivo: Capturar Hola mundo
Cadena: 1!"#Hola mundo¬¬


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.

leogtz

#1
Código (perl) [Seleccionar]
$string =~ m/.*#(\w.*)¬¬+.*/;
$string =~ m/(Hola mundo)/;


Reto #2:

Agregar un carácter al inicio de cada palabra usando una expresión regular.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

~ Yoya ~

#2
Código (perl) [Seleccionar]
$cadena = 'hOla munDo xD';
$cadena =~ s/(?i)([a-z]+)(?-i)(?#this is perl)[\s\,]*/¬¬$1/g;

Resultado:
¬¬hOla¬¬munDo¬¬xD

Reto #3:

Eliminar las palabras de una cadena que contenga entre 3 y 4 palabras, incluyendo caracteres con tildes o raros, ejemplo: Ö ×Ø

Cadena:
xxxxxx DD DD@D #|!c asasØ a/aaaW 56a
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.

leogtz

No entiendo ese último, y honestamente si lo veo algo dificil no pienso contestar  :xD, tengo demasiada tarea.  :-(
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

#!drvy

Código (php) [Seleccionar]

<?php
$string 
'xxxxxx DD DD@D #|!c asasØ a/aaaW 56a';
$filter '/[a-zA-ZÖ×Ø]{3,4}/';
$result preg_replace($filter,'',$string);
print 
$result;
// $result = xx DD DD@D #|!c Ø a/ 56a
?>



No se me ocurre nada asi que..

Reto #3
Eliminar letras mayusculas y numeros asi como cualquier caracter tipo " , ñ , ( etc... de esta cadena:
o234m$g·%· we  31234 %· (will) ""· WEHATE/POLICE (r0ock) (yñço&u)

Saludos

Shell Root

No creo que la RegExp de @drvy | BSM, funcione!
Código (PoC) [Seleccionar]
Ê ÙÔ Ö ÓÒ ÁÒ ÓÖÑ ÓÒ ÐØ ÈÖ × ÓÒ ÄÓ× Ë ×Ø Ñ × Ù×ÕÙ Ê ×ÔÙ ×Ø
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

~ Yoya ~

#6
En realidad funciona ya que el texto a buscar en este caso es constante...

Bueno aquí la respuesta del reto 4
Código (php) [Seleccionar]
<?php
$string 
'o234m$g·%· we  31234 %· (will) ""· WEHATE/POLICE (r0ock) (yñço&u)';
$result preg_replace('/[^a-z]+/','',$string);
print 
$result;
//omgwewillrockyou
?>


Reto #5

Bueno vamos con la validación de datos usando expresiones regulares

nombre@dominio-es/en/....com/org/net/,etc...
La constante aqui son
@ - .

En el nombre puede contener caracteres alfanuméricos  y no puede contener mas de 5 como longitud el nombre.

En el dominio solo se aceptan letras excepto las e, i, t,z...

En el - solo se acepta letras pero no mas de dos y la primera debe ser en mayúscula y la segunda minúscula....

Después del punto se puede aceptar .com, .es, cl, ar, etc... pero deben ser minúscula

Ejemplo

YoyA@gmaal-ES.com ->True
Yo Ya@gmaail-Es.com -> False
Yoya@.com -> False
XD@xd-Xd.xd -> True


Diviértanse xD
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

#7
^(?![.,])(?:[\w!#$%&\'*+\/=?^_`{|}~\-]+(?:[.,][\w!#$%&\'*+\/=?^_`{|}~\-]+)*|(?>\".+\"))+(?![.,])@(?>\[(?:(?>2(?>5[0-5]|[0-4]?\d)|1?\d{1,2})\.){3}(?:(?>2(?>5[0-5]|[0-4]?\d)|1?\d{1,2}))\]|(?![.,])[\w!#$%&\'*+\/=?^_`{|}~\-]+(?:[.,][\w!#$%&\'*+\/=?^_`{|}~\-]+)*(?:\.[a-zA-Z]+))$

http://foro.elhacker.net/php/expresion_regular-t282130.0.html;msg1392077#msg1392077
Creo que te gane de antemano :P

Reto #6

Siguiendo con el tema de las validaciones, Hacer una expresion regular para validar una URI completa (url + directorios + GET por ejemplo)

http://www.elhacker.net <- True
foro.elhacker.net/post123.html <- True
elhack/juanking <- Flase
https://elh4xor.org/view?id=123 <- True
https://elh4xor.org/view?id=123#post2 <- True
https://elh4xor.org/view=123 <- False

PD: si se presentan varios, sera premiado (?) el que mas respete el RFC 2396

raul338

Bueno,... viendo que nadie mas respondio :P la expreg que pedia era

^(?:(?>ht|f)tps?://)?(?:\w+[.-]\w+)+(?::\d+)?(?:\/[\w\-\.\?\,\'+&%\$_]*)*(?:\??(?:[\w\-\._]+=[\w\-\.\?\,\\'\/+%\$_]*&?)*)?(?:\#[\w]+)?$


^(?:
(?>ht|f)tps?://)?    -> Protocolo
(?:\w+[.-]\w+)+   -> Dominio y subdominios
(?::\d+)?             -> Puerto
(?:\/[\w\-\.\?\,\'+&%\$_]*)*  -> SubDirectorios
(?:\??(?:[\w\-\._]+=[\w\-\.\?\,\\'\/+%\$_]*&?)*)? -> QueryString
(?:\#[\w]+)?        -> Punto de anclaje
$


jeje.... no presento reto por ahora, asi que es libre :xD

Psyke1

#9
@Reto 5
Esta es la mia:
^[\w\._\-]{2,}@[\w\._\-]{2,}\.[a-zA-Z]{2,4}(\.[a-zA-Z]{2,4})?$
Se que no incluye tantas validaciones como la de raul338 pero buneo... :rolleyes:

PD: raul338 a ver si un dia te pillo por el msn y me resuelves algna duda... ;)

DoEvents! :P