$re = '/^(?:\d{7,8}|[TD]\d{6,7}|TD\d{5,6})$/mi';
$str = '7 and 8 numbers: \'1234567\' and \'12345678\'
1234567
12345678
7 and 8 numbers that start with T: \'T234567\' and \'T2345678\'
T234567
T2345678
7 and 8 numbers that start with D: \'D234567\' and \'D2345678\'
D234567
D2345678
7 and 8 numbers that start with TD: \'TD34567\' and \'TD345678\'
TD34567
TD345678';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php