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