#!/usr/bin/perl
use strict; # https://perlmonks.org/?node_id=11146148
use warnings;
my $template = 'abcdefa';
my $regex = '';
my %used;
for my $char ( split //, $template )
{
if( exists $used{$char} ) # seen before
{
$regex .= "\\$used{$char}";
}
else # new different character
{
$regex .= join '', map("(?!\\$_)", values %used), "(.)";
$used{$char} = 1 + keys %used;
}
}
my $qr = qr/^$regex$/; # the real regex
use Data::Dump 'dd'; dd $qr;
@ARGV = '/usr/share/dict/words';
/$qr/ and print, exit while <>; # show first match
####
qr/^(.)(?!\1)(.)(?!\2)(?!\1)(.)(?!\2)(?!\1)(?!\3)(.)(?!\4)(?!\3)(?!\2)(?!\1)(.)(?!\5)(?!\2)(?!\1)(?!\3)(?!\4)(.)\1$/
algebra
##
##
#!/usr/bin/perl
use strict; # https://perlmonks.org/?node_id=11146148
use warnings;
my $template = 'abcdefa';
my $regex = '';
my %used;
for my $char ( split //, $template )
{
if( exists $used{$char} ) # seen before
{
$regex .= "\\$used{$char}\n";
}
else # new different character
{
$regex .= join '', map("(?!\\$_)", sort values %used), "(.)\n";
$used{$char} = 1 + keys %used;
}
}
my $qr = qr/^$regex$/x; # the real regex
use Data::Dump 'dd'; dd $qr;
@ARGV = '/usr/share/dict/words';
use List::AllUtils qw{ sample };
print sample 10, grep /$qr/, <>
##
##
qr/^(.)
(?!\1)(.)
(?!\1)(?!\2)(.)
(?!\1)(?!\2)(?!\3)(.)
(?!\1)(?!\2)(?!\3)(?!\4)(.)
(?!\1)(?!\2)(?!\3)(?!\4)(?!\5)(.)
\1
$/x
swipe's
enforce
tugboat
discard
slogans
sailors
neutron
shock's
singles
snipe's