Мне интересно, лучше ли представлять количество исправлений в регулярном выражении. Например, если я просто хочу совместить ровно 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