Регулярное выражение: есть ли способ установить максимальный размер шаблона?

#javascript #regex #validation #indicative

Вопрос:

Например, если у меня есть строка:
0123456789

Я бы написал выражение так:
0.*9 WHERE PATTERN MAX SIZE is 3. in this case, pattern should fail.

Комментарии:

1. Итак, вы ищете цифру ноль, любой символ и цифру 9, а шаблон должен соответствовать только строке из 3 символов?

2. Возможно, вы могли бы предоставить нам список строк, которые должны совпадать, и строк, которые не должны совпадать.

Ответ №1:

Конкретное решение для вашего примера таково:

 /^0.?9$/
 

Общее решение вашего абстрактного вопроса таково:

 /^(?=.{0,3}$)0.*9$/
 

В приведенном выше (?=.{0,3}$) примере показано, что остальная часть строки имеет длину от 0 до 3.

Комментарии:

1. Аккуратно… никогда не думал об использовании предвидения для ограничения длины строки, хотя, вероятно, было бы проще сделать это вне регулярного выражения.

Ответ №2:

x{min,max} будет соответствовать x между минимальным и максимальным временем
x{min,} будет соответствовать x не менее мин раз
x{,max} будет соответствовать x не более чем в максимальное время
x{n} будет соответствовать x ровно n раз

Все диапазоны включены.

Ярлыки: {0,1} => > ? , {0,} => > * , {1,} => > .

Я не уверен, что это именно то, что вам нужно, но это должно помочь вам создать регулярное выражение.

Пример: ^0d{,3}9$ будут совпадать строки не более чем с 5 цифрами, начинающимися с 0 и заканчивающимися 9. Совпадения: 0339 , 06319 , 09 . Не совпадает: 033429 , 1449 .

Комментарии:

1. Похоже, ему нужно d{0,3}

2. @атомайзер Я думаю , что ему нужно что-то вроде ^0d?9$ , но он не знает, как об этом спросить :).

3. @стефано, этот парень делает это лучше: regular-expressions.info/reference.html

4. я пытаюсь объяснить лучше 🙂 я должен создать небольшой редактор регулярных выражений. там будет поле, в котором пользователь установит «максимальный размер шаблона», поэтому, если я напишу 0.* с «максимальным размером шаблона» = 3 регулярное выражение должно учитывать только 012, а не 0123456789 я надеюсь, что мне ясно!

5. @Стефано М.: Что вы подразумеваете под «следует рассмотреть»? Вы имеете в виду «должен принять»? Можете ли вы привести пример, показывающий конкретные результаты, которые вы хотите получить для различных входных данных?

Ответ №3:

Похоже, вы хотите программно изменить регулярное выражение.

Пожалуйста, укажите язык, который вы используете (JS, Python, PHP и т.д.).

Вот как вы могли бы сделать это с помощью JavaScript:

 sYourPattern    = '0.*9';
iPatternMaxSize = 3;

zRegex = new RegExp ('^(?=.{0,'   iPatternMaxSize   '}$)'   sYourPattern   '

Это дает:

 '9' --> Совпадения нет
 '09' --> Совпадение
 '009' --> Совпадение
 '0009' --> Нет совпадения
'19' -->> Нет совпадения


);
alert (zRegex.test ('09') );

Это дает: