Предложение
polygenelubricants является отличным предложением, но есть и лучшее, и в нем нужно использовать более простое ограничение, учитывая, что большая часть RE проверяет числовость символов в любом случае. Почему, смотрите этот журнал интерактивного сеанса Tcl:
% set RE1 "^(?=\\d{5}$)1?2?3?4?5?6?7?8?9?0?$"
^(?=\d{5}$)1?2?3?4?5?6?7?8?9?0?$
% set RE2 "^(?=.{5}$)1?2?3?4?5?6?7?8?9?0?$"
^(?=.{5}$)1?2?3?4?5?6?7?8?9?0?$
% time {regexp $RE1 24579} 100000
32.80587355 microseconds per iteration
% time {regexp $RE2 24579} 100000
22.598555649999998 microseconds per iteration
Как вы можете видеть, примерно на 30% быстрее использовать версию RE с .{5}$
в качестве ограничения на будущее, по крайней мере, в движке Tcl RE. (Обратите внимание, что в приведенном выше журнале пропущены некоторые строки, в которых я стабилизировал компиляцию регулярных выражений, хотя я ожидаю, что RE2 все равно будет немного быстрее компилироваться.) Если вы используете другой механизм RE (например, PCRE или Perl), тогда вы должны перепроверить, чтобы получить свои собственные показатели производительности.