Я предполагаю, что, возможно, может сработать выражение с границей слова:
(?=.*\btest\b.*).*(\btest\b).*
мы также можем включить группы без захвата, для нечасти:
(?=.*\btest\b.*)(?:.*)(\btest\b)(?:.*)
Пример
$re = '/(?=.*\btest\b.*)(?:.*)(\btest\b)(?:.*)/m';
$str = 'test some other words that comes after
some other words before test some other words that comes after';
$subst = '';
$result = preg_replace($re, $subst, $str);
echo $result;