2010-04-16 16 views

Respuesta

2

Cualquier implementación posible debería tener una longitud máxima razonable en mente para las cadenas generadas. Si hay un + o * en cualquier parte de esa expresión regular, las posibilidades podrían ser infinitas. Regexp::Genex considera esto.

+0

Desafortunadamente "perl -MRegexp :: Genex =: all -le 'imprimir para cadenas (" [a-z] ")" no funciona bien. Creo que tiene errores con() y [] conjuntos. – wibble

0

Ninguna de las soluciones que he encontrado maneja lookaheads; Regexp :: Genex no lo hace, ni tampoco la solución aquí:

http://www.mail-archive.com/[email protected]/msg31051.html

Aunque estoy de acuerdo que HOP es un libro impresionante, que es en realidad sólo se trata de un pequeño subconjunto de expresiones regulares "out-of-the- caja".

Si alguien sabe de uno que se ocupa de los símbolos de anticipación, eso sería genial:/

+0

El problema de la mochila (conocido por ser NP-completo) puede traducirse trivialmente en la determinación de si existen cadenas que coincidan con una expresión regular construida (con lookaheads). En otras palabras, es muy difícil. – ephemient

0

por si alguien le resulta útil:

 
*$ cat bitfizz.pl* 
#!/usr/bin/perl 
use strict; 
if (($#ARGV+1)!=2) { print "usage $0 \n"; } 
my @r = &bitfizz($ARGV[0], $ARGV[1]); 
for(@r){ print "$_\n"; } 
sub bitfizz() { 
    $_[0]=join(",", split(//, $_[0])); 
    for(my $i=1; $i<=$_[1]; $i+=1) { $_=$_."{$_[0]}"; } 
    @r=glob($_); 
} 

entonces usted puede hacer:

 
*perl bitfizz.pl "01" 8* 
00000000 
00000001 
00000010 
00000011 
00000100 
--snip-- 

todas las permutaciones de un byte en los bits o

 
*perl bitfizz.pl "ABCDEF" 2* 

por ejemplo

Cuestiones relacionadas