Синтаксис с конечным повторением использует {m,n}
вместо звездочки / плюса / вопросительного знака.
С java.util.regex.Pattern
:
X{n} X, exactly n times
X{n,} X, at least n times
X{n,m} X, at least n but not more than m times
Все метасимволы повторения имеют одинаковый приоритет, поэтому, как и вам, возможно, понадобится группировка для *
, +
и ?
, вы можете также для {n,m}
.
ha*
соответствует, например, "haaaaaaaa"
ha{3}
соответствует только "haaa"
(ha)*
соответствует, например, "hahahahaha"
(ha){3}
соответствует только "hahaha"
Также, как и *
, +
и ?
, вы можете добавить модификаторы неохотного и притяжательного повторения ?
и +
соответственно.
System.out.println(
"xxxxx".replaceAll("x{2,3}", "[x]")
); "[x][x]"
System.out.println(
"xxxxx".replaceAll("x{2,3}?", "[x]")
); "[x][x]x"
Практически везде, где *
является метасимволом повторения для «ноль или более», вы можете использовать {...}
конструкцию повторения. Обратите внимание, что с другой стороны это не так: вы можете использовать конечное повторение в просмотре сзади, но вы не можете использовать *
, потому что Java официально не поддерживает просмотр бесконечной длины.
Ссылки
Смежные вопросы