Давайте сначала рассмотрим этот шаблон: [34]{3}
[…]
- это класс символов , он точно соответствует одному из символов в наборе.{n}
- это точное конечное повторение .
Так, [34]{3}
неофициально означает «ровно 3 из '3'
или '4'
».Таким образом, он соответствует "333"
, "334"
, "343"
, "344"
, "433"
, "434"
, "443"
, "444"
и ничему другому.
как строковый литерал, шаблон "[34]{3}"
.Если вы не хотите жестко кодировать этот шаблон, просто сгенерируйте похожие строки, следующие за этим шаблоном "[…]{n}"
.Просто введите символы, которые вы хотите сопоставить, в …
и замените n
на нужное число.
Вот пример:
String alpha = "aeiou";
int n = 5;
String pattern = String.format("[%s]{%s}", alpha, n);
System.out.println(pattern);
// [aeiou]{5}
Мы уже виделичто шаблон не жестко закодирован, а скорее программно сгенерирован в зависимости от значений переменных alpha
и n
.В паттерне [aeiou]{5}
будут 5 последовательных строчных гласных, например, "ooiae"
, "ioauu"
, "eeeee"
и т. Д.
Опять не ясно, хотите ли вы просто соответствовать этим типам строк или если онидолжен выглядеть как '…'/'…'/'…'/'…'/'…'
.Если последнее желательно, то просто составьте шаблон по своему усмотрению, используя повторение и группирование при необходимости.Вы также можете просто программно скопировать и вставить шаблон 5 раз, если это проще.Вот пример:
String p5 = String.format("'%s'/'%<s'/'%<s'/'%<s'/'%<s'", pattern);
System.out.println(p5);
// '[aeiou]{5}'/'[aeiou]{5}'/'[aeiou]{5}'/'[aeiou]{5}'/'[aeiou]{5}'
Теперь он будет соответствовать строкам вроде "'aeooi'/'eeiuu'/'uaooo'/'eeeia'/'eieio'"
.
Предостережение
Будьте осторожны с тем, что входит в alpha
.В частности, -
, [
.]
, &&
, ^
и т. Д. Являются специальными метасимволами в определении класса символов Java.Если вы ограничите alpha
только цифрами / буквами, то вы, вероятно, не столкнетесь с какими-либо проблемами, но, например, [^a]
не НЕ означает «либо '^'
, либо 'a'
».Фактически это означает «что угодно, кроме 'a'
. Точный синтаксис класса символов см. В java.util.regex.Pattern
.