Вы, вероятно, хотите, чтобы модификатор regex U (PCRE_UNGREEDY, не совпадал). Это приведет к наименьшему возможному совпадению, что означает, что вы не будете совпадать с начала первого <! - PLAYER = до конца последнего ->
Сокращенный пример:
<?php
$text = "blah\n<!-x=abc->blah<!-x=def->blah\n\nblah<!-x=ghi->\nblahblah" ;
$reg = "/<!-x=(.*)->/U" ;
preg_match_all( $reg, $text, $matches ) ;
print_r( $matches ) ;
Ваш код становится:
$find_players = preg_match_all("/<!--PLAYER=(.*)-->/Ui", $html_content, $matches);
// print $matches[1] ;
Модификатор 's' (PCRE_DOTALL), который вы используете, вероятно, также бесполезен; вряд ли у вас будет имя файла с переводом строки.
РЕДАКТИРОВАТЬ: @Stevens предлагает этот синтаксис, который я согласен, немного яснее - перемещение модификатора U в скобки захвата.
$find_players = preg_match_all("/<!--PLAYER=(?U)(.*)-->/i", $html_content, $matches);