Ответ 1
Для Java:
X, ровно n раз: X {n}
X, по крайней мере, n раз: X {n,}
X, по крайней мере n, но не более m раз: X {n, m}
Мне интересно, лучше ли представлять количество исправлений в регулярном выражении. Например, если я просто хочу совместить ровно 14 букв/цифр, я использую ^\w\w\w\w\w\w\w\w\w\w\w\w\w\w$
, который будет соответствовать слову типа UNL075BE499135
и не соответствует UNL075BE499135AAA
есть ли удобный способ сделать это? В настоящее время я делаю это в java, но, я думаю, это может относиться и к другому языку. Спасибо заранее.
Для Java:
X, ровно n раз: X {n}
X, по крайней мере, n раз: X {n,}
X, по крайней мере n, но не более m раз: X {n, m}
^\w{14}$
в Perl и любом регулярном выражении в стиле Perl.
Если вы хотите узнать больше о регулярных выражениях - или просто нужна удобная ссылка - Википедия в регулярных выражениях на самом деле очень хороша.
Фиксированный синтаксис повторения использует {m,n}
вместо метки звезды/плюса/вопроса.
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"
По существу где-то a *
является метасимволом повторения для "zero-or-more", вы можете использовать конструкцию повторения {...}
. Обратите внимание, что это не так: наоборот, вы можете использовать конечное повторение в lookbehind, но вы не можете использовать *
, потому что Java официально не поддерживает бесконечную длину lookbehind.
.*
и .*?
для регулярного выраженияregex{n,}?
== regex{n}
?a{1}b{0,1}
вместо ab?
В Java создайте шаблон с Pattern p = Pattern.compile("^\\w{14}$");
для получения дополнительной информации см. javadoc