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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  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 10,528 veces)
bdoX

Desconectado Desconectado

Mensajes: 35



Ver Perfil
Re: Expresion regular en Perl
« Respuesta #10 en: 11 Enero 2012, 03:23 am »

Veo que nunca supiste lo que yo queria resolver. Yo quiero validar la entrada de solo combinaciones en {a, b}, y me diga que pertenezca al lenguaje. Si aparece al menos una letras que no sean {a, b} o vacio, automaticamente quiero que me diga que no pertenece al lenguaje.

yo quiero esto

"3}p2aa-0" --> No pertenece al lenguaje
"abababababaaabbaababa" ----> si pertenece al lenguaje

saludos!!


En línea

D4RIO


Desconectado Desconectado

Mensajes: 1.004


U N I X


Ver Perfil WWW
Re: Expresion regular en Perl
« Respuesta #11 en: 11 Enero 2012, 14:58 pm »

No entiendo porqué tanta complicación. Si me permites la intromisión, un alfabeto {a,b} (siendo {a,b} un conjunto de 2 elementos) debería reconocer como válidas:

  • aa
  • ab
  • bb
  • abababb
  • bbabbb

Y cualquier palabra que se componga de SOLO 'a' y 'b'. Si deseas que la cadena vacía sea inválida, entonces tu expresión es tan simple como "/^[a|b]+$/", es decir: Los elementos a y b son los únicos válidos de principio a fin, y al menos debe existir un elemento válido.
Si deseas considerar espacios es otra cosa, pero para ver SOLO palabras compuestas por las letras "a" y "b" sería:

Código
  1. #!/usr/bin/env perl
  2.  
  3. use strict;
  4.  
  5. die "sin parametros\n" unless (@ARGV);
  6.  
  7. print "el lenguaje se compone de 'a' y 'b'\n";
  8.  
  9. for (@ARGV) {
  10.    if (/^[a|b]+$/) {
  11.        print "'$_' pretenece al lenguaje\n";
  12.    }
  13.    else {
  14.        print "'$_' NO pretenece al lenguaje\n";
  15.    }
  16. }
  17.  
  18. exit (0);
  19.  

Llamalo con las palabras que desees como parámetros, agrega la cadena vacía, usa un arreglo tuyo en lugar de ARGV, como sea.

Saludos


En línea

OpenBSDFreeBSD
~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: Expresion regular en Perl
« Respuesta #12 en: 11 Enero 2012, 15:35 pm »

Si ps, yo tampoco entiendo tanto complicación, supongo porque no ha explicado bien que es lo que quieres hacer.
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.
D4RIO


Desconectado Desconectado

Mensajes: 1.004


U N I X


Ver Perfil WWW
Re: Expresion regular en Perl
« Respuesta #13 en: 11 Enero 2012, 17:41 pm »

Por cierto, me permito hacer otra aclaración que nadie hizo. El operador (función) m (match) de Perl, es TOTALMENTE INNECESARIO en las expresiones que pegaron antes.

Usaría el operador de matching si fuera a delimitar la expresión de otra forma, por ejemplo:

m#^[a|b]+$#
m:^[a|b]+$:
m%^[a|b]+$%

En caso de usar slashes ( / ), el operador m no es necesario, porque está implícito. Es lo mismo ponerlo que no hacerlo.

~ Yoya ~: Tu expresión tampoco matchea lo que dices que matchearía, o lo que debería. La expresión m/^[a-z\ñ]+$/i lo que hace es devolver verdadero (1) si la cadena está conformada con caracteres de la 'a' a la 'z' incluyendo la 'ñ', tanto mayúsculas como minúsculas.

La otra expresión:
Código
  1. if ($nombre =~ m/[^ab]/ | $nombre =~ m/^$/)
lo que hace es verificar que la cadena EMPIECE por 'a' o 'b', pero dará como válido cosas como 'astilla' o 'barco'.

Saludos
En línea

OpenBSDFreeBSD
bdoX

Desconectado Desconectado

Mensajes: 35



Ver Perfil
Re: Expresion regular en Perl
« Respuesta #14 en: 11 Enero 2012, 19:49 pm »


La otra expresión:
Código
  1. if ($nombre =~ m/[^ab]/ | $nombre =~ m/^$/)
lo que hace es verificar que la cadena EMPIECE por 'a' o 'b', pero dará como válido cosas como 'astilla' o 'barco'.

Saludos

Código:
C:\>validar.pl
Ingrese nombre de usuario: barco
No pertenece al lenguaje

C:\>validar.pl
Ingrese nombre de usuario: astilla
No pertenece al lenguaje

C:\>

Lo que dice acá if ($nombre =~ m/[^ab]/ | $nombre =~ m/^$/) es que si encuentra una letra que sea diferende de 'a' ó 'b', o si hay una cadena vacia, que entre al if() de lo contrario, que entre al else, entrando al else me dice que si pertenece al lenguaje. Y los resultados con w = "astilla" y w = "barco", no es cierto de que me da como si perteneciera al lenguaje.

Y lo de la m, ya habia comentado de que no era necesario usarlo, pero no sabia porque, gracias por aclarar eso.

PD:

[^\@ \t] busca cualquier carácter que no sea un @, una tabulación o un espacio. Hay que señalar que \ delante de @ es opcional, ya que el símbolo @ no tiene significados particulares en este contexto, pero funciona también con \@

[^]    indica un conjunto de caracteres que no pueden aparecer

Fuente:

     URL

     URL



saludos!
« Última modificación: 11 Enero 2012, 20:22 pm por bdoX » En línea

D4RIO


Desconectado Desconectado

Mensajes: 1.004


U N I X


Ver Perfil WWW
Re: Expresion regular en Perl
« Respuesta #15 en: 11 Enero 2012, 20:44 pm »

Cierto, lo confundí con /^[ab]/, lo extraño es que hice una prueba rápida para ver si me equivocaba, y:

Código:
$ perl ab.pl asas barco bola asta baba
el lenguaje se compone de 'a' y 'b'
'asas' pretenece al lenguaje
'barco' pretenece al lenguaje
'bola' pretenece al lenguaje
'asta' pretenece al lenguaje
'baba' NO pretenece al lenguaje

Parece como si hubiera puesto /^[^ab]$/... debe ser porque estoy en cygwin. Cuando llegue a mi casa verifico si en Linux tengo el mismo problema.

PD: La fuente por excelencia para hablar de expresiónes de Perl es el perlretut, la documentación oficial de perldoc. La referencia a esto sería esta

Saludos
En línea

OpenBSDFreeBSD
bdoX

Desconectado Desconectado

Mensajes: 35



Ver Perfil
Re: Expresion regular en Perl
« Respuesta #16 en: 11 Enero 2012, 21:16 pm »

PD: La fuente por excelencia para hablar de expresiónes de Perl es el perlretut, la documentación oficial de perldoc. La referencia a esto sería esta

Saludos

Gracias por el dato.

saludOS!
En línea

explorer

Desconectado Desconectado

Mensajes: 102


Analista/Programador Perl


Ver Perfil
Re: Expresion regular en Perl
« Respuesta #17 en: 16 Enero 2012, 16:30 pm »

Sería algo así:
Código
  1. #!/usr/bin/perl
  2. use 5.010;
  3. use utf8;
  4. use strict;
  5.  
  6. print "Ingrese nombre de usuario: ";
  7. my $nombre = <>;
  8. chomp $nombre ;
  9.  
  10. if ($nombre =~ /^[ab]+$/i) {
  11.    say 'Sí pertenece';
  12. }
  13. else {
  14.    say 'No pertenece';
  15. }
  16.  

« Última modificación: 16 Enero 2012, 16:36 pm por explorer » En línea

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 4,044 Último mensaje 21 Julio 2005, 15:22 pm
por jcjuank
Expresión regular « 1 2 3 »
PHP
IWKY 29 20,655 Último mensaje 25 Enero 2010, 23:57 pm
por ~ Yoya ~
ayuda con una expresion regular :(
Programación General
Elemental Code 6 4,662 Último mensaje 23 Mayo 2012, 04:10 am
por Elemental Code
duda sobre patron de expresion regular
Programación General
MagnusIvanovich 5 3,447 Último mensaje 14 Marzo 2013, 20:11 pm
por 1mpuls0
Ayuda Expresion Regular
Ingeniería Inversa
macmaikel 2 2,633 Último mensaje 11 Junio 2013, 03:36 am
por macmaikel
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines