Это всего лишь несколько строк действительно простого, понятного и надежного кода, который вы могли бы написать и переписать 3 раза за количество времени, которое потребуется вам для публикации и получения ответа на версию RE. (И, конечно, с версией RE не будет очевидно, что вы делаете).
int examine(String s) {
int foundAt=-1;
for(int i=0;i<s.length;i++) {
char c=s.charAt(i); // something like that
if(c=='A') {
foundAt=i;
continue;
}
if(foundAt != -1) {
if(c == 'B' && i-foundAt < 5 || i-foundAt > 6)
return foundAt;
if(!String.isNumber(c)) // something like that
foundAt = -1; // Not a number before B, reset
}
}
return -1;
}
Хорошо, так что это немного больше, чем несколько строк (но оно также заключено в вызов функции), но изменить поведение, чтобы сделать что-то хитрое, проще, чем модифицировать RE, где изменения могут легко повлечь непредвиденные последствия, должно быть тривиальным для чтения, и как только будут устранены первые несколько простых ошибок, это будет надежно - что-то, что, кажется, никогда не относится к регулярным выражениям.
Итак, разве это не так коротко и читабельно, как вы собираетесь получить?
n=examine(s);
Любое «преимущество» более короткого кода полностью исключается, если его заменить легким для чтения, надежным вызовом функции.
(я полагаю, что есть хороший шанс, что это домашний вопрос, и на него НЕ следует правильно отвечать, если он есть)