in reply to Building Regex Alternations Dynamically
Here's a slightly funny usage:
#!/usr/bin/perl # file fusselkerl use strict; die "usage: $0 pattern [file]\n" unless @ARGV; my $p; { my (%s, %i); my $d = my $c = 1; # our regexp will be inside parens, so first back +ref is 2 $p = join ( "", map { if($s{$_}++){ "\\".$i{$_} } else{ $i{$_}=++$c; $c>$d+1 ? '(?!'.join('|',map{"\\".abs}-$c+1..-$d-1).")(\\w)" : + "(\\w)"; } } split //, shift ); } print '(',$p,")\n"; local $" = ', '; my %s; while (<>) { my @l = (); while (/\b($p)\b/g) { push @l, $1 unless $s{$1}++; } print "@l\n" if @l; }
try
perl fusselkerl fusselkerl /usr/share/dict/words
edit: oh, I posted that already years ago... Re: How to use a negative backreference in regex?, sorry ;)
|
---|