( zamboriz | 2013. 09. 23., h – 22:18 )

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