$text = preg_replace("/([0-9](\s|\t)*){7,}/", "", $text);
That pattern could be simplified:
$text = preg_replace('#(?:[0-9]\s*){7,}#', '', $text);
1) Use single quotes, as you do not need to have the PHP interpreter parse variables in this case.
2) Understand that \s is a character class shorthand representation for any whitespace character (which includes a literal space, \t [tabs], \n [newline], \r [carriage return], \f [formfeed] - not sure if I missed anything else), so including \t in with \s in the alternation is pointless.
3) Even if \t was separate from \s, when dealing with one simple item or the other, use a character class instead of an alternation, as character classes are faster..so instead of checking for a or b like so: (a|b) you can use [ab] instead.
4) The entire pattern was encased in a capturing group. Since you are doing a simple replace, you don't need to capture anything.. so you can instead resort to making the entire group non capturing by using the format (?: ... ) instead.
Don 't mind the # delimiters.. that's just a matter of personal preference. I use hashes so that if I do have actual forward slashes in my pattern, I won't need to escape them.. so it's a habit.