Foros del Web » Programación para mayores de 30 ;) » Programación General »

duda expresion regular

Estas en el tema de duda expresion regular en el foro de Programación General en Foros del Web. buenas! tengo una expresin regular que es la siguiente: (01|1*)0* Esta expresión regular me acepta palabras como: 100 10000 010000 01000000 0100000000 010000000000 Lo que ...
  #1 (permalink)  
Antiguo 25/05/2010, 06:33
 
Fecha de Ingreso: febrero-2010
Mensajes: 63
Antigüedad: 14 años, 2 meses
Puntos: 0
duda expresion regular

buenas!

tengo una expresin regular que es la siguiente:

(01|1*)0*

Esta expresión regular me acepta palabras como:

100
10000
010000
01000000
0100000000
010000000000

Lo que quisiera hacer ahora es que NO me aceptara palabras como estas:

010
01000
0100000
010000000
01000000000

Es decir, las que tienen un número impar de carácteres.

Sabéis como puedo hacer esto?

Saludos
  #2 (permalink)  
Antiguo 25/05/2010, 13:59
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 17 años, 11 meses
Puntos: 11
Respuesta: duda expresion regular

¿Cómo que impares? En los primeros ejemplos hay algunos que tienen un número impar de caracteres...

Falta algo más de precisión...

Si, por ejemplo, queremos que el número de ceros que siguen al uno sea par, entonces podemos tener una expresión regular como la siguiente:

Código Perl:
Ver original
  1. #!/usr/bin/perl
  2. use 5.010;
  3.  
  4. my @test_ok = qw(
  5.     100
  6.     10000
  7.     010000
  8.     01000000
  9.     0100000000
  10.     010000000000
  11. );
  12.  
  13. my @test_nook = qw(
  14.     10
  15.     010
  16.     01000
  17.     0100000
  18.     010000000
  19.     01000000000
  20. );
  21.  
  22. my $regexp = qr/^0?1(0*)\1$/;
  23.  
  24. for (@test_ok) {
  25.     unless (/$regexp/) {
  26.         say "Falló $regexp con prueba positiva de $_";
  27.     }
  28. }
  29.  
  30. for (@test_nook) {
  31.     if (/$regexp/) {
  32.         say "Falló $regexp con prueba negativa de $_";
  33.     }
  34. }
El programa no debe generar nada, indicando que la expresión regular ha cazado todas las combinaciones que nos interesan, y descartado las demás.

La expresión regular (^0?1(0*)\1$) funciona así: desde el principio (^) al final ($), buscamos un texto que comience quizás con 0 (0?), seguido de un '1', seguido de una cantidad de ceros, que capturamos ((0*)), y seguida por la misma cantidad de ceros capturados antes (\1). De esa manera, nos aseguramos que el número de ceros siempre sea par.
__________________
JF^D Perl Programming en Español

Última edición por jferrero; 25/05/2010 a las 16:36

Etiquetas: expresion, regular
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:31.