Autor
|
Tema: Expresion regular en Perl (Leído 10,528 veces)
|
bdoX
Desconectado
Mensajes: 35
|
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
Mensajes: 1.004
U N I X
|
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: 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: #!/usr/bin/env perl use strict; die "sin parametros\n" unless (@ARGV); print "el lenguaje se compone de 'a' y 'b'\n"; for (@ARGV) { if (/^[a|b]+$/) { print "'$_' pretenece al lenguaje\n"; } else { print "'$_' NO pretenece al lenguaje\n"; } }
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
|
|
|
|
~ Yoya ~
Wiki
Desconectado
Mensajes: 1.125
|
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
Mensajes: 1.004
U N I X
|
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: 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
|
|
|
|
bdoX
Desconectado
Mensajes: 35
|
La otra expresión: 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:\>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
Mensajes: 1.004
U N I X
|
Cierto, lo confundí con /^[ab]/, lo extraño es que hice una prueba rápida para ver si me equivocaba, y: $ 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 estaSaludos
|
|
|
En línea
|
|
|
|
bdoX
Desconectado
Mensajes: 35
|
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 estaSaludos Gracias por el dato. saludOS!
|
|
|
En línea
|
|
|
|
explorer
Desconectado
Mensajes: 102
Analista/Programador Perl
|
Sería algo así: #!/usr/bin/perl use 5.010; use utf8; use strict; print "Ingrese nombre de usuario: "; my $nombre = <>; if ($nombre =~ /^[ab]+$/i) { say 'Sí pertenece'; } else { say 'No pertenece'; }
|
|
« Última modificación: 16 Enero 2012, 16:36 pm por explorer »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Una expresion regular en PERL....¡¡No la entiendo
Scripting
|
jcjuank
|
2
|
4,044
|
21 Julio 2005, 15:22 pm
por jcjuank
|
|
|
Expresión regular
« 1 2 3 »
PHP
|
IWKY
|
29
|
20,655
|
25 Enero 2010, 23:57 pm
por ~ Yoya ~
|
|
|
ayuda con una expresion regular :(
Programación General
|
Elemental Code
|
6
|
4,662
|
23 Mayo 2012, 04:10 am
por Elemental Code
|
|
|
duda sobre patron de expresion regular
Programación General
|
MagnusIvanovich
|
5
|
3,447
|
14 Marzo 2013, 20:11 pm
por 1mpuls0
|
|
|
Ayuda Expresion Regular
Ingeniería Inversa
|
macmaikel
|
2
|
2,633
|
11 Junio 2013, 03:36 am
por macmaikel
|
|