Насколько я знаю, они идентичны. Я думаю, что там может быть несколько двигателей, которые не поддерживают пронумерованный синтаксис, но я не уверен, что. Я смутно вспоминаю вопрос о SO несколько дней назад, когда явное обозначение не работает в Notepad ++.
Единственный раз, когда я буду использовать явно пронумерованное повторение, - это когда повторение больше 1:
{2}
{2,}
{2,4}
Я предпочитаю это особенно, когда повторяющийся рисунок больше нескольких символов. Если вам нужно сопоставить 3 числа, некоторым людям нравится писать: \d\d\d
, но я бы предпочел написать \d{3}
, поскольку он подчеркивает количество повторений. Кроме того, по дороге, если это число когда-либо должно измениться, мне нужно только изменить {3}
на {n}
, а не повторно анализировать регулярное выражение в моей голове или беспокоиться о том, чтобы испортить его; это требует меньших умственных усилий.
Если эти критерии не выполнены, я предпочитаю сокращение. Использование «явной» записи быстро загромождает шаблон и затрудняет его чтение. Я работал над проектом, в котором некоторые разработчики не слишком хорошо знали регулярное выражение (это не совсем любимая тема для всех), и я видел много {1}
и {0,1}
случаев. Несколько человек попросят меня пересмотреть свой шаблон, и именно тогда я предлагаю изменить эти события на сокращенную нотацию и сэкономить место, а ИМО улучшить читаемость.
Я вижу, как, если у вас есть регулярное выражение, которое выполняет много ограниченного повторения, вы можете использовать форму {n,m}
для удобства чтения. Например:
/^
abc{2,5}
xyz{0,1}
foo{3,12}
bar{1,}
$/x
Но я не могу вспомнить, что когда-либо видел такой случай в реальной жизни. Когда я вижу {0,1}
, {0,}
или {1,}
, которые используются в вопросе, это практически всегда делается из-за незнания. И в процессе ответа на такой вопрос мы также должны предположить, что вместо этого они используют ?
, *
или +
.
И, конечно, {1}
- чистый беспорядок. Некоторые люди, похоже, имеют смутное представление о том, что это означает «один и только один». В конце концов, это должно означать что-то , правильно? Почему такой патологически краткий язык поддерживает конструкцию, которая занимает целых три символа и ничего не делает? Его единственным законным использованием, которое я знаю, является выделение обратной ссылки, за которой следует буквальная цифра (например, \1{1}0
), но есть и другие способы сделать это.
Они эквивалентны (и вы узнаете, доступны ли они, протестировав ваш контекст.)
Проблема, которую я ожидал, - это когда вы не единственный человек, который когда-либо нуждался в работайте с вашим кодом. Regexes достаточно сложно для большинства людей. В любое время, когда кто-то использует необычный синтаксис, возникает вопрос: «Почему они не сделали это стандартным образом? Что они думали, что мне не хватает?»
?
или +
.
{0,1}
«показывает намерение более четко»; чем?
, следовательно, Q. – polygenelubricants 13 June 2010 в 16:47