Есть ли у ваших файлов интервалы или отступы? Это может привести к тому, что ваше регулярное выражение не будет работать.
Ваше регулярное выражение будет соответствовать этому
<?
Но это не будет соответствовать ни одному из них из-за расстояния.
<?
<?
<?
Если вы хотите регулярное выражение, которое допускает пробелы и отступы, попробуйте это
^\s*<\?\s*$