perl-ben valami ilyesmi:
@test = (
'ABC12',
'D8Z9T',
'GL65N',
'1ABA2',
'1AB1C',
'12345',
'ABCDE',
'AB12',
'ABC123',
);
$regexp = '^((([A-Z])(?!.*\g{-1})([A-Z])(?!.*\g{-1})([A-Z])(?!.*\g{-1})([0-9])(?!.*\g{-1})([0-9])(?!.*\g{-1}))|(([A-Z])(?!.*\g{-1})([A-Z])(?!.*\g{-1})([0-9])(?!.*\g{-1})([A-Z])(?!.*\g{-1})([0-9])(?!.*\g{-1}))|(([A-Z])(?!.*\g{-1})([A-Z])(?!.*\g{-1})([0-9])(?!.*\g{-1})([0-9])(?!.*\g{-1})([A-Z])(?!.*\g{-1}))|(([A-Z])(?!.*\g{-1})([0-9])(?!.*\g{-1})([A-Z])(?!.*\g{-1})([A-Z])(?!.*\g{-1})([0-9])(?!.*\g{-1}))|(([A-Z])(?!.*\g{-1})([0-9])(?!.*\g{-1})([A-Z])(?!.*\g{-1})([0-9])(?!.*\g{-1})([A-Z])(?!.*\g{-1}))|(([A-Z])(?!.*\g{-1})([0-9])(?!.*\g{-1})([0-9])(?!.*\g{-1})([A-Z])(?!.*\g{-1})([A-Z])(?!.*\g{-1}))|(([0-9])(?!.*\g{-1})([A-Z])(?!.*\g{-1})([A-Z])(?!.*\g{-1})([A-Z])(?!.*\g{-1})([0-9])(?!.*\g{-1}))|(([0-9])(?!.*\g{-1})([A-Z])(?!.*\g{-1})([A-Z])(?!.*\g{-1})([0-9])(?!.*\g{-1})([A-Z])(?!.*\g{-1}))|(([0-9])(?!.*\g{-1})([A-Z])(?!.*\g{-1})([0-9])(?!.*\g{-1})([A-Z])(?!.*\g{-1})([A-Z])(?!.*\g{-1}))|(([0-9])(?!.*\g{-1})([0-9])(?!.*\g{-1})([A-Z])(?!.*\g{-1})([A-Z])(?!.*\g{-1})([A-Z])(?!.*\g{-1})))$';
foreach $t (@test){
print $t," ",(($t=~m/$regexp/)?'match':'no-match'),"\n";
}
eredmény:
ABC12 match
D8Z9T match
GL65N match
1ABA2 no-match
1AB1C no-match
12345 no-match
ABCDE no-match
AB12 no-match
ABC123 no-match