Для конечного ввода не существует формального регулярного выражения, которое не остановило бы.
Любое формальное регулярное выражение может быть переведено в детерминированные конечные автоматы. DFA читает ввод по одному символу за раз, и в конце ввода вы находитесь либо в принимающем состоянии, либо в неприемлемом состоянии. Если состояние принимает, то ввод соответствует регулярному выражению. В противном случае это не так.
Теперь большинство библиотек "регулярных выражений" поддерживают вещи, которые не являются регулярными выражениями, например обратные ссылки. Пока вы держитесь подальше от этих функций и имеете ограниченный ввод, вы гарантированно остановитесь. Если вы этого не сделаете ... в зависимости от того, что именно вы используете, вам может быть не гарантирован останов. Perl, например, позволяет вставлять произвольный код, а произвольный эквивалентный по Тьюрингу код не гарантирует остановки.
Теперь, если ввод бесконечен, можно найти тривиальные регулярные выражения, которые никогда не остановятся. Например, ".*
".