У меня есть все эти винты. Чтобы вбить их в этот кусок дерева, я должен использовать коготь или шариковый молоток?
Это (примерно) то, что задает твой вопрос. То, что вы должны сделать, это просто перебирать каждый символ строки. Я могу сделать это на C. Смотреть:
int validate(char *s)
{
int a = 0, a = 0;
while(*s)
{
switch(*s++)
{
case 'a':
a++;
break;
case 'b':
b++;
break;
}
}
return a == 5 && b == 5;
}
Это оставлено вам в качестве упражнения: а) преобразовать это на ваш язык по выбору, б) изменить, чтобы оно соответствовало только последовательным последовательностям «а» и «б» (если вам нравится) или настроить его под ваши другие конкретные требования .
Суть в том, что есть гораздо лучшие инструменты для этой работы, чем регулярное выражение, поэтому, если "a" и "b" не являются заменой для более сложных регулярных выражений, не используйте для этого регулярные выражения. И даже если «a» и «b» действительно более сложные регулярные выражения, вам не нужно решать все проблемы с One Regex To Rule All All. Вы можете смешать несколько полезных регулярных выражений и цикл кода (например, выше), чтобы получить гораздо больший эффект, чем огромный (и не поддерживаемый) Regex-zilla.