Ваш синтаксис предпросмотра выключен, потому что он неправильно проверяет позиции, которые вы указали в своих требованиях.Кажется, мне подходит следующий шаблон регулярных выражений:
^(?=.{0,3}\d)(?=.{4,7}[a-z])(?=.{8,11}[A-Z])(?=.{12,15}[.,$%^&!@]).{16}$
Объяснение:
(?=.{0,3}\d) - number in positions 1-4
(?=.{4,7}[a-z]) - lowercase in positions 5-8
(?=.{8,11}[A-Z]) - uppercase in positions 9-12
(?=.{12,15}[.,$%^&!@]) - symbol in positions 13-16
Демо
Iне знаю grep
или Linux достаточно хорошо, чтобы прокомментировать, используете ли вы его наилучшим образом, но это должно по крайней мере исправить все проблемы, которые у вас возникли с шаблоном.