Ваше регулярное выражение ведет себя так, потому что \d{4,}
может соответствовать МНОГИМ различных комбинаций, а если число после \t
недопустимо, , оно должно проверить их все . Предположим, у нас есть:
1000211\t875349678\t1000211
Если \d{4}
стоит первым, а число после \t
не 1167331
, он должен проверить 1000211\t
, 000211\t
, 00211\t
, 0211\t
, прежде чем он определит, что число после \t
недопустимо. Представьте, если бы ваши номера были длиннее - нужно было бы проверить еще больше контента, прежде чем переходить к следующему! Что еще хуже, если число после \t
равно почти допустимо, оно также проверит все эти символы, и потребуется еще больше времени для запуска.
Если 1167331
будет первым, ононужно только проверить 10
, прежде чем он выйдет из строя и перейдет к следующему номеру.
Проверьте пошаговый отладчик ваших медленных и быстрых регулярных выражений - выВы увидите довольно быстро, в чем разница.