A\d+.*(B\d+)?
ОК, так что это обеспечивает что-то, что проходит все тестовые случаи
НО у него есть несколько ложных срабатываний.
A\d+(.*B\d+)?
Кажется, что другие символы должны появляться только в том случае, если B (что угодно) следует за ними, поэтому используйте вместо этого выше.
#perl test case hackup
@array = ('A01B100', 'A01.B100', 'A01', 'A01............................B100', 'A01FAIL', 'NEVER');
for (@array) {
print "$_\n" if $_ =~ /^A\d+(.*B\d+)?$/;
}