elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Expresion regular en Perl
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Expresion regular en Perl  (Leído 9,715 veces)
bdoX

Desconectado Desconectado

Mensajes: 35



Ver Perfil
Expresion regular en Perl
« en: 9 Enero 2012, 23:39 pm »

Hola a todos:

Les cuento mi duda, pasa que quiero validar una espresion regular  y quiero que solo me reconozca el string en el alfabeto= {a, b}.

acá dejo el code. No se en que estoy fallando.

Código
  1. print "Ingrese nombre de usuario: ";
  2. $nombre=<STDIN>;
  3. chomp($nombre);
  4.  
  5. if ($nombre =~ m/[c-z]/ | $nombre !~ m/\w/ | $nombre =~ m/[0-9]/)
  6. {
  7. print "No pertenece al lenguaje\n";
  8. }
  9. else
  10. {
  11. print "Si pertenece\n";
  12. }
  13.  

Con esto solo me acepta el alfabeto [a,b] + caracteres especiales como por ejemplo +, - {. } !, --. Pero eso no es lo que quiero. Ayuda please!

Código
  1. print "Ingrese nombre de usuario: ";
  2. $nombre=<STDIN>;
  3. chomp($nombre);
  4.  
  5. if ($nombre =~ m/[c-z]/ | $nombre =~ /m[0-9]/)
  6. {
  7. print "No pertenece al lenguaje\n";
  8. }
  9. else
  10. {
  11. print "Si pertenece\n";
  12. }
  13.  


« Última modificación: 10 Enero 2012, 23:24 pm por Leo Gutiérrez. » En línea

~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: Espresion regular en Perl
« Respuesta #1 en: 10 Enero 2012, 00:17 am »

Analiza el script que acabo de hacer, compararlo y luego pregunta cualquier cosa.

Código
  1. #!/usr/bin/perl
  2.  
  3. use POSIX qw(locale_h);
  4.  
  5.  
  6. =pod
  7. En este caso es mucho mejor utilizar chomp, ya que este borra el salto de linea al final del string
  8. chop borra el ultimo caracter al final del string....
  9.  
  10.  
  11. Establesco el locale para el script, para que me tome la letra ñ como parte del alfabeto....
  12. =cut
  13.  
  14.  
  15.  
  16. setlocale(LC_ALL, 'es_DO.ISO-8859-1');
  17.  
  18. my $nombre = <>;
  19.  
  20. chomp($nombre); #Borro el salto de linea del final del string si existe
  21.  
  22.  
  23.  
  24. if($nombre =~ m/[a-z]/i) {
  25. print "Si\n";
  26.  
  27. }


En línea

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

Desconectado Desconectado

Mensajes: 35



Ver Perfil
Re: Espresion regular en Perl
« Respuesta #2 en: 10 Enero 2012, 02:45 am »

Hola ~ Yoya ~:

Gracias por responder, solo entiendo esta parte de tu code.

Código:
my $nombre = <>;
 
chomp($nombre); #Borro el salto de linea del final del string si existe
 
if($nombre =~ m/[a-z]/i) {
print "Si\n";

La verdad es que no se que tan importante colocarle la m if($nombre =~ m/[a-z]/i) , porque sin él, me funciona igual. A lo mejor es para hacerlo mas portable. (Estoy bajo windows)

No se si me explique bien, pero voy a dar unos ejemplos que lo quiero.

Código
  1. string = "abababababababba"; # deberia tomarlo
  2. string = "ababaaabbb+.-aba"; # No deberia tomarlo
  3. string = "ok23iaajij3o+i23jaabv"; #No deberia tomarlo
  4. string = "a"; #deberia tomarlo;
  5. string = "b"; #deberia tomarlo;
  6. string = " "; #No deberia tomarlo;
  7. string = ""; #No deberia tomarlo;
  8. string = "+"; #No deberia tomarlo;
  9. string = "a+b"; #No deberia tomarlo;
  10. #... etc
  11.  
« Última modificación: 10 Enero 2012, 02:50 am por bdoX » En línea

Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.723


<3


Ver Perfil WWW
Re: Espresion regular en Perl
« Respuesta #3 en: 10 Enero 2012, 03:02 am »

m//
Este operador también conocido como de cotejo, se utiliza para localizar alguna expresión dentro de una cadena de texto o string. Si la expresión es verdadera entonces se regresará un 1.

:http://perlenespanol.com/tutoriales/expresiones_regulares/expresiones_regulares_las_bases.html
En línea

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.
bdoX

Desconectado Desconectado

Mensajes: 35



Ver Perfil
Re: Espresion regular en Perl
« Respuesta #4 en: 10 Enero 2012, 03:15 am »

Para no salir del hilo, modifiqué lo del operador m// arriba. También modifique lo de chop(), por chomp(), pero los resultados son iguales


EDITADO

solucionado, acá dejo el code, era mas facil de lo que me esperaba jajajaj.

Código
  1. print "Ingrese nombre de usuario: ";
  2. $nombre=<STDIN>;
  3. chomp($nombre);
  4.  
  5. #analiso si la cadena no contiene a,b y analiso si la cadena es vacia
  6. if ($nombre =~ m/[^ab]/ | $nombre =~ m/^$/)
  7. {
  8.    print "No pertenece al lenguaje\n";
  9. }
  10. else
  11. {
  12.    print "Si pertenece\n";
  13. }
  14.  

Gracias por su ayuda, saludos!
« Última modificación: 10 Enero 2012, 03:48 am por bdoX » En línea

~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: Espresion regular en Perl
« Respuesta #5 en: 10 Enero 2012, 15:39 pm »

La expresión regular que estas usando es valida solo si no existe el carácter a o b, en el string. Ej:

Citar
[yoya@Fedora Escritorio]$ perl a.pl
Ingrese nombre de usuario: c
No pertenece al lenguaje
[yoya@Fedora Escritorio]$ perl a.pl
Ingrese nombre de usuario: a
Si pertenece
[yoya@Fedora Escritorio]$

Código
  1. #!/usr/bin/perl
  2.  
  3. print "Ingrese nombre de usuario: ";
  4. $nombre=<STDIN>;
  5. chomp($nombre);
  6.  
  7. #analiso si la cadena no contiene a,b y analiso si la cadena es vacia
  8. if($nombre =~ m/^[a-z\ñ]+$/i) {
  9. print 'Si pertenece', "\n";
  10. }else{
  11. print 'No pertenece', "\n";
  12. }
  13.  

Con esta compruebo que en la cadena entera debe existir solo las letras del alfabeto, desde el inicio al final.

Saludos.
En línea

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

Desconectado Desconectado

Mensajes: 35



Ver Perfil
Re: Espresion regular en Perl
« Respuesta #6 en: 10 Enero 2012, 17:05 pm »

La expresión regular que estas usando es valida solo si no existe el carácter a o b, en el string. Ej:

Código
  1. #!/usr/bin/perl
  2.  
  3. print "Ingrese nombre de usuario: ";
  4. $nombre=<STDIN>;
  5. chomp($nombre);
  6.  
  7. #analiso si la cadena no contiene a,b y analiso si la cadena es vacia
  8. if($nombre =~ m/^[a-z\ñ]+$/i) {
  9. print 'Si pertenece', "\n";
  10. }else{
  11. print 'No pertenece', "\n";
  12. }
  13.  

Con esta compruebo que en la cadena entera debe existir solo las letras del alfabeto, desde el inicio al final.

Saludos.

Con tu code, me aparece esto:

Código:
C:\>tucode.pl
Ingrese nombre de usuario: c
Si pertenece

C:\>tucode.pl
Ingrese nombre de usuario: a
Si pertenece

C:\>

Como te darás cuenta, estoy bajo windows. No me aparece como a ti

Código:
[yoya@Fedora Escritorio]$ perl a.pl
Ingrese nombre de usuario: c
No pertenece al lenguaje
[yoya@Fedora Escritorio]$ perl a.pl
Ingrese nombre de usuario: a
Si pertenece
[yoya@Fedora Escritorio]$

Por eso no entiendo lo que dices. Lo que hice anteriormente me valida bien el string en el alfabeto {a,b}.

Es solo una validacion, para resolver este tipo de expresiones regulares

"L = {w|w contiene las substring aa o bb pero no ambas}"
"L = {w|w no hay tres a′s consecutivas}"
"L = {w|w tiene numero par de a’s}" // ese no se me ocurre com hacerlo

saludos!
« Última modificación: 10 Enero 2012, 17:45 pm por bdoX » En línea

~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: Espresion regular en Perl
« Respuesta #7 en: 10 Enero 2012, 23:20 pm »

Esta parte

Código:
[yoya@Fedora Escritorio]$ perl a.pl
Ingrese nombre de usuario: c
No pertenece al lenguaje
[yoya@Fedora Escritorio]$ perl a.pl
Ingrese nombre de usuario: a
Si pertenece
[yoya@Fedora Escritorio]$

Fue con tu código, creo que el tema esta volviendo complicado cuando el problema es muy simple.
En línea

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

Desconectado Desconectado

Mensajes: 35



Ver Perfil
Re: Espresion regular en Perl
« Respuesta #8 en: 10 Enero 2012, 23:28 pm »

Esta parte

Código:
[yoya@Fedora Escritorio]$ perl a.pl
Ingrese nombre de usuario: c
No pertenece al lenguaje
[yoya@Fedora Escritorio]$ perl a.pl
Ingrese nombre de usuario: a
Si pertenece
[yoya@Fedora Escritorio]$

Fue con tu código, creo que el tema esta volviendo complicado cuando el problema es muy simple.

Segun yo, los resultados que te da son buenos, con tu codigo me dan resultados que no espero tener. Aun sigo sin entenderte.

Bueno, segun yo, ya está solucionado mi duda.

Si aun crees que está malo mi codigo, dame un string en el alfabeto donde el programa se caiga.

saludos!

« Última modificación: 10 Enero 2012, 23:34 pm por bdoX » En línea

~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: Expresion regular en Perl
« Respuesta #9 en: 10 Enero 2012, 23:59 pm »

Código
  1. #!/usr/bin/perl
  2.  
  3.  
  4. @nombres = ('juan','JOse', 'Luan', '565656aaa', '%_$__', 'Raa', 'b');
  5.  
  6.  
  7.  
  8. print '----------Yoya codigo', "\n";
  9. foreach $nombre (@nombres) {
  10.  
  11. #analiso si la cadena no contiene a,b y analiso si la cadena es vacia
  12. if($nombre =~ m/^[a-z\ñ]+$/i) {
  13. print "$nombre -> Si pertenece\n";
  14. }else{
  15. print "$nombre -> No pertenece\n";
  16. }
  17.  
  18. }
  19.  
  20. print "\n----------bdoX codigo\n";
  21. foreach $nombre (@nombres) {
  22.  
  23. if ($nombre =~ m/[^ab]/ | $nombre =~ m/^$/)
  24. {
  25.    print "$nombre -> No pertenece al lenguaje\n";
  26. }
  27. else
  28. {
  29.    print "$nombre -> Si pertenece\n";
  30. }
  31. }
  32.  

Código:
[yoya@Fedora Escritorio]$ perl a.pl
----------Yoya codigo
juan -> Si pertenece
JOse -> Si pertenece
Luan -> Si pertenece
565656aaa -> No pertenece
%_$__ -> No pertenece
Raa -> Si pertenece
b -> Si pertenece

----------bdoX codigo
juan -> No pertenece al lenguaje
JOse -> No pertenece al lenguaje
Luan -> No pertenece al lenguaje
565656aaa -> No pertenece al lenguaje
%_$__ -> No pertenece al lenguaje
Raa -> No pertenece al lenguaje
b -> Si pertenece
En línea

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.
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Una expresion regular en PERL....¡¡No la entiendo
Scripting
jcjuank 2 3,812 Último mensaje 21 Julio 2005, 15:22 pm
por jcjuank
Expresión regular « 1 2 3 »
PHP
IWKY 29 19,432 Último mensaje 25 Enero 2010, 23:57 pm
por ~ Yoya ~
ayuda con una expresion regular :(
Programación General
Elemental Code 6 4,102 Último mensaje 23 Mayo 2012, 04:10 am
por Elemental Code
duda sobre patron de expresion regular
Programación General
MagnusIvanovich 5 3,046 Último mensaje 14 Marzo 2013, 20:11 pm
por 1mpuls0
Ayuda Expresion Regular
Ingeniería Inversa
macmaikel 2 2,340 Último mensaje 11 Junio 2013, 03:36 am
por macmaikel
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines