| 
	
		|  Autor | Tema: Expresion regular en Perl  (Leído 11,658 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'. SaludosC:\>validar.plIngrese 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 babael 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 | 
 
 |  |  |  | 
			| 
					
						| 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 esta SaludosGracias por el dato.saludOS ! |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| explorer 
								
								 Desconectado 
								Mensajes: 102
								
								 
								Analista/Programador Perl
								
								
								
								
								
								   | 
 
Sería algo así: #!/usr/bin/perluse 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,472 |  21 Julio 2005, 15:22 pm por jcjuank
 |  
						|   |   | Expresión regular
							« 1 2 3 » PHP
 | IWKY | 29 | 22,127 |  25 Enero 2010, 23:57 pm por ~ Yoya ~
 |  
						|   |   | ayuda con una expresion regular :( Programación General
 | Elemental Code | 6 | 5,249 |  23 Mayo 2012, 04:10 am por Elemental Code
 |  
						|   |   | duda sobre patron de expresion regular Programación General
 | MagnusIvanovich | 5 | 4,001 |  14 Marzo 2013, 20:11 pm por 1mpuls0
 |  
						|   |   | Ayuda Expresion Regular Ingeniería Inversa
 | macmaikel | 2 | 2,989 |  11 Junio 2013, 03:36 am por macmaikel
 |    |