2010-04-16 12 views

Antwort

2

Jede mögliche Implementierung sollte eine vernünftige maximale Länge für die erzeugten Zeichenfolgen berücksichtigen. Wenn es eine + oder * irgendwo in diesem Regexp gibt, könnten die Möglichkeiten ohne Ende sein. Regexp::Genex berücksichtigt dies.

+0

leider "perl -MRegExp :: Genex =: all -le 'drucke für strings (" [a-z] ")'" funktioniert aber nicht. Ich denke, es hat Fehler mit() und [] Sets. – wibble

0

Keine der Lösungen, die ich angetroffen habe, handhaben Lookaheads; Regexp :: Genex nicht, auch nicht die Lösung hier:

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

Während ich damit einverstanden, dass HOP ein tolles Buch, es ist wirklich nur mit einem kleinen Teil der regulären Ausdrücke „out-of-the-Umgang Box".

Wenn jemand von einer weiß, dass Lookaheads behandelt, würde das groß sein:/

+0

Das Rucksackproblem (bekannt als NP-complete) kann trivial übersetzt werden, um festzustellen, ob es irgendwelche Zeichenfolgen gibt, denen eine konstruierte Regex (mit Lookaheads) entspricht. Mit anderen Worten, es ist zu schwer. – ephemient

0

nur falls jemand es nützlich findet:

 
*$ 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($_); 
} 

dann können Sie tun:

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

Alle Permutationen eines Bytes in Bits oder

 
*perl bitfizz.pl "ABCDEF" 2* 

zum beispiel

Verwandte Themen