Как представить фиксированное количество повторов в регулярном выражении? - PullRequest
39 голосов
/ 16 июля 2010

Мне интересно, есть ли лучший способ представить фиксированное количество повторов в регулярном выражении.Например, если я просто хочу сопоставить ровно 14 букв / цифр, я использую ^\w\w\w\w\w\w\w\w\w\w\w\w\w\w$, что будет соответствовать слову типа UNL075BE499135, а не совпадению UNL075BE499135AAA. Есть ли удобный способ сделать это?В настоящее время я делаю это в Java, но я думаю, что это может относиться и к другим языкам.Заранее спасибо.

Ответы [ 4 ]

60 голосов
/ 16 июля 2010

для Java:

Документация по квантификаторам

X, ровно n раз: X {n}
X, по крайней мере, n раз: X {n,}
X не менее n, но не более m раз: X {n, m}

22 голосов
/ 16 июля 2010

Синтаксис с конечным повторением использует {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 официально не поддерживает просмотр бесконечной длины.

Ссылки

Смежные вопросы

19 голосов
/ 16 июля 2010

^\w{14}$ в Perl и любом регулярном выражении в стиле Perl.

Если вы хотите узнать больше о регулярных выражениях - или просто нужна удобная ссылка - запись в Википедии о регулярных выражениях на самом деле довольно хорошо.

1 голос
/ 16 июля 2010

В Java создайте шаблон с Pattern p = Pattern.compile("^\\w{14}$"); для получения дополнительной информации , см. Javadoc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...