Test Foro de elhacker.net SMF 2.1

Programación => Programación General => Ejercicios => Mensaje iniciado por: ~ Yoya ~ en 3 Octubre 2010, 17:02 PM

Título: Retos de Expresiones Regulares
Publicado por: ~ Yoya ~ en 3 Octubre 2010, 17:02 PM
Buenas a todos, todavía no he visto el primer reto de expresiones regulares...
Las reglas:

Bueno un reto facil, para empezar XD

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


Título: Re: Retos de Expresiones Regulares
Publicado por: leogtz en 3 Octubre 2010, 17:31 PM
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.
Título: Re: Retos de Expresiones Regulares
Publicado por: ~ Yoya ~ en 3 Octubre 2010, 18:16 PM
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
Título: Re: Retos de Expresiones Regulares
Publicado por: leogtz en 4 Octubre 2010, 06:54 AM
No entiendo ese último, y honestamente si lo veo algo dificil no pienso contestar  :xD, tengo demasiada tarea.  :-(
Título: Re: Retos de Expresiones Regulares
Publicado por: #!drvy en 5 Octubre 2010, 01:15 AM
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
Título: Re: Retos de Expresiones Regulares
Publicado por: Shell Root en 5 Octubre 2010, 02:30 AM
No creo que la RegExp de @drvy | BSM, funcione!
Código (PoC) [Seleccionar]
Ê ÙÔ Ö ÓÒ ÁÒ ÓÖÑ ÓÒ ÐØ ÈÖ × ÓÒ ÄÓ× Ë ×Ø Ñ × Ù×ÕÙ Ê ×ÔÙ ×Ø
Título: Re: Retos de Expresiones Regulares
Publicado por: ~ Yoya ~ en 5 Octubre 2010, 03:02 AM
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
Título: Re: Retos de Expresiones Regulares
Publicado por: raul338 en 5 Octubre 2010, 15:50 PM
^(?![.,])(?:[\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 (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 (http://www.faqs.org/rfcs/rfc2396.html)
Título: Re: Retos de Expresiones Regulares
Publicado por: raul338 en 26 Octubre 2010, 23:15 PM
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
Título: Re: Retos de Expresiones Regulares
Publicado por: Psyke1 en 29 Octubre 2010, 11:02 AM
@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
Título: Re: Retos de Expresiones Regulares
Publicado por: ~ Yoya ~ en 30 Octubre 2010, 20:22 PM
Haber quien plantea un nuevo reto xD :-(
Título: Re: Retos de Expresiones Regulares
Publicado por: Psyke1 en 5 Noviembre 2010, 14:36 PM
Cita de: ~ Yoya ~ en 30 Octubre 2010, 20:22 PM
Haber quien plantea un nuevo reto xD :-(
No llores gatito :-* :laugh: :laugh: :laugh:


Reto #7
Sacar los números con decimales, puntos y negativos de un texto haciendo las validaciones necesareas.

Ej:
Citarhola 3455345 sdfsdf 345435,3454 sdfsdf j ksjdh skdjfh 1.233.555,34534 asdasd as 344.34 qweqwe 23,324.324 qweqwe -234324324

Los validos serian :
Citar3455345
345435,3454
1.233.555,34534
-234324324

A por ello! :D

DoEvents! :P
Título: Re: Retos de Expresiones Regulares
Publicado por: ~ Yoya ~ en 5 Noviembre 2010, 15:20 PM
Código (php) [Seleccionar]
<?php

$txt 
"hola 3455345 sdfsdf 345435,3454 sdfsdf j ksjdh skdjfh 1.233.555,34534 asdasd as 344.34 qweqwe 23,324.324 qweqwe -234324324";
preg_match_all("/([\d\-\,\.]+)/"$txt$capturaPREG_SET_ORDER);
   foreach (
$captura as $salida):
      echo 
$salida[1];
      echo 
"<br>";
   endforeach;

?>


3455345
345435,3454
1.233.555,34534
344.34
23,324.324
-234324324




Reto #8

Eliminar los espacios en blancos que estén en medio, las condiciones son que a la derecha debe estar una letra y a la izquierda un numero.

Cadena:
hola 3455345 sdfsdf 345435,3454 sdfsdf j ksjdh skdjfh 1.233.555,34534 asdasd as 344.34 qweqwe 23,324.324 qweqwe -234324324
Título: Re: Retos de Expresiones Regulares
Publicado por: Psyke1 en 5 Noviembre 2010, 16:33 PM
@Yoya
No vale esa RegExp para el Reto 7.
Solo puede captar números validos, fijate bien en el ejemlpo que puse ;)
Segun tu RegExp estos serian numeros validos (y no lo son):
Citar344.34
23,324.324
El punto en este caso no se usara como decimal, sino para separar miles, asi:
Citar76.234.345.456.788.999.000,345345345

Jeje, ahora no es tan facil  :-*

DoEvents! :P
Título: Re: Retos de Expresiones Regulares
Publicado por: Psyke1 en 5 Noviembre 2010, 17:28 PM
@Reto 7
(?![.,])-?(\d{1,3}\.|\d+)(\d{3}\.?\d{3})*(\,?\d+)?
Aqui dejo la mia, corregidme si veis algun fallo ;) , la he hecho corriendo que me tengo que marchar... :¬¬

DoEvents! :P
Título: Re: Retos de Expresiones Regulares
Publicado por: ~ Yoya ~ en 5 Noviembre 2010, 19:01 PM
Bueno aunque se vea fácil es muy complicado cuando intentas crear una expresión regular para validar o capturar cualquier texto, en este caso es un texto fijo y lo pude hacer.

Código (perl) [Seleccionar]
#!/usr/bin/perl
$text = 'hola 3455345 sdfsdf 345435,3454 sdfsdf j ksjdh skdjfh 1.233.555,34534 asdasd as 344.34 qweqwe 23,324.324 qweqwe -234324324';

while($text =~ m/(?:\s)([\d\.]+\,\d+(?=\s)|\d+\,\d+(?=\s)|\d+(?=\s)|\-\d+)/g)
{
   print $1, "\n";
}


Salida:
3455345
345435,3454
1.233.555,34534
-234324324



La regexp que creaste no filtra correctamente, debes tratar de crear una regexp mas estricta de modo que si x parte no cumple con x condición, la regexp se pare y no devuelva ninguna referencia. Trata de hacer una Regexp que devuelva una sola Referencia mejor y no 3.



Se podría hacer fácilmente una regexp que valide cualquier texto, a mi se me ocurriría dividir primero el texto y luego validarlo pero es mejor hacerlo todo en una sola Regexp y que devuelva una sola referencia xD. Mas tarde miro como me hago para crear una sola regexp o que alguno muestre su regexp para validar cualquier texto xD.

Título: Re: Retos de Expresiones Regulares
Publicado por: Psyke1 en 6 Noviembre 2010, 00:46 AM
Ook Yoya, gracias por la explicación, me pongo con el Reto 8 mañana... :P

DoEvents! :P
Título: Re: Retos de Expresiones Regulares
Publicado por: ~ Yoya ~ en 23 Marzo 2011, 02:26 AM
Buenas, estaba pensando que podemos hacer un benchmark de las Regexp para ver cual es el patron mas optimizado para cada problema.

Saludos.
Título: Re: Retos de Expresiones Regulares
Publicado por: cyberserver en 10 Marzo 2013, 18:25 PM
Buenos días.

Estos trabajando con este texto:


Citar
FN Thomson Reuters Web of Knowledge
VR 1.0
PT S
AU O'Flynn, B
   Torre, G
   Fernstrom, M
   Winkler, T
   Lynch, A
   Barton, J
   Angove, P
   O'Mathuna, SC
AF O'Flynn, B.
   Torre, G.
   Fernstrom, M.
   Winkler, T.
   Lynch, A.
   Barton, J.
   Angove, P.
   O'Mathuna, S. C.
BE Leonhardt, S
   Falck, T
   Mahonen, P
TI Celeritas - A wearable sensor system for interactive digital dance
   theatre
SO 4th International Workshop on Wearable and Implantable Body Sensor
   Networks (BSN 2007)

Y estoy interesado en separar el texto de todas las etiqueta FN,VR........TI,SO por partes.

Para poder tener la parte de la etiqueta correspondiente por ejemplo
Etiqueta: SO
Contenido: 4th International Workshop on Wearable and Implantable Body Sensor
   Networks (BSN 2007)

Creen ustedes que seria buena idea usar expresiones regulares, y si fuera el caso cual me recomiendas, estaba pensando quiza en buscar las primeras letras de un renglón que fueran mallusculas.


Caray a quien engaño siempre me han costado mcuho trabajo las expresiones, alguien me puede ayudar a solucionar.
Título: Re: Retos de Expresiones Regulares
Publicado por: cyberserver en 10 Marzo 2013, 18:51 PM
Ya tengo para seleccionar solo las etiquetas:


/^([A-Z]{1}+[A-Z|0-9]{1}+\s)/gm


Pero cómo puedo hacer para seleccionar lo demas.
Título: Re: Retos de Expresiones Regulares
Publicado por: cyberserver en 10 Marzo 2013, 19:28 PM
No no puedo.

Lo que intento hacer es que casi casi coloques dentro de la expresión el nombre de la etiqueta y te de como resultado el contenido de esta.

Si alguien puede ayudarme.