MHXY Ответов: 1

Регулярное выражение для непересекающихся прописных букв со строчными


std:: string s("AAA");
std:: smatch m;
std:: regex e("(?=.{3,}[А-я])(?=.{0,}[a-z]).*");
output = std:: regex_search(s, m, e);

Здесь он должен иметь 3 или более заглавных букв и ноль или более строчных букв.
Однако выход равен нулю, что означает, что он терпит неудачу. Когда я пытаюсь заменить ноль на 1 и
s ("AAA4") он работает нормально.

Итак, теперь я хочу, чтобы он допускал ноль или больше, но кажется, что он не принимает ноль
Я даже попробовал Квантор ( * ), который эквивалентен {0,} все еще не работает.

Что я уже пробовал:

.
I also tried [A-Z]{3,}[a-z]* 
but this will allow:
s("AAA") and s("AAAb") but now s("AbAA")
as it will allow only if upper are consecutive.

Patrice T

Покажите нам примеры того, что должно соответствовать, а что нет.

1 Ответов

Рейтинг:
2

OriginalGriff

Вам нужно добавить начало и конец строковых кодов.
Попробовать это:

^[A-Z]{3,}[a-z]*$

Ваше регулярное выражение требует двух суффиксов, которые не захватываются, что довольно странно.

Получить копию Экспрессо[^]- это бесплатно, и он исследует и генерирует регулярные выражения.