Хотя эту проблему можно решить с помощью чисто регулярных выражений (набор строго восходящих пятизначных строк конечен, так что вы можете просто перечислить все из них), он не подходит для регулярных выражений.
Тем не менее, вот как бы я это сделал, если бы мне пришлось:
^\d*(?=\d{5}(\d*)$)0?1?2?3?4?5?6?7?8?9?\1$
Основная идея: 0?1?2?3?4?5?6?7?8?9?
соответствует возрастающей числовой подстроке, но не ограничивает ее длину.Каждая отдельная часть является необязательной, поэтому она может соответствовать чему угодно, от ""
(пустая строка) до полной "0123456789"
.
. Мы можем заставить ее совпадать ровно с 5 символами, комбинируя упреждающий просмотр из пяти цифри произвольный суффикс (который мы фиксируем) и обратная ссылка \1
(которая должна в точности соответствовать суффиксу, соответствующему прогнозу, гарантируя, что мы теперь опередили 5 символов в строке).
Демонстрация в реальном времени: https://regex101.com/r/03rJET/3
(Кстати, ваше объяснение (?=\d{5}0*1*2*3*4*5*6*7*8*9*)
неверно: оно рассчитывает на совпадение ровно 5 цифр, за которыми следуют 0 или более вхождений 0
, а затем 0 или более вхождений1
и т. д.)