Выражение отрицания с просмотром вперед может быть полезно как для фильтрации целых строк по наличию в них подстрок так и подстрок. Отрицаем всю строку по наличию в ней подстроки «404»:
/^(?!.*404).*\.php/gm
результат:
https://regex101.com/r/7fUL1u/1
А чтобы отсечь только точные совпадения подстрок, а именно только файл 404.php чуточку изменим регулярку:
/^(?!404).+\.php$/gm