php regex, извлечь телефонные номера из строки?

У меня есть небольшая проблема с моим регулярным выражением, которое я использую для извлечения телефонных номеров из сильного

<?php $output = "here 718-838-3586 there 1052202932 asdas dasdasd 800-308-4653 dasdasdasd 866-641-6949800-871-0999"; preg_match_all('/\b[0-9]{3}\s*[-]?\s*[0-9]{3}\s*[-]?\s*[0-9]{4}\b/',$output,$matches); echo '<pre>'; print_r($matches[0]); ?> 

вывод

 Array ( [0] => 718-838-3586 [1] => 1052202932 [2] => 800-308-4653 [3] => 866-641-6949 [4] => 800-871-0999 ) 

эта работа прекрасна, но возвращает 1052202932 как результат, который мне не нужен.
на самом деле я не знаю, где пропавшая часть в моем шаблоне.

? после каждого [-] делает необязательным. Если вы хотите, чтобы это было необходимо, вы можете просто удалить ? что потребует. Кроме того, [-] эквивалентно - поэтому я избавился от ненужного класса символов:

 preg_match_all('/\b[0-9]{3}\s*-\s*[0-9]{3}\s*-\s*[0-9]{4}\b/',$output,$matches); 

Вы также можете заменить все [0-9] на \d чтобы немного сократить его:

 preg_match_all('/\b\d{3}\s*-\s*\d{3}\s*-\s*\d{4}\b/',$output,$matches); 

? в regex означает {0,1}, и вам нужно ровно 1 появление '-' в вашем шаблоне

 preg_match_all('/\b[0-9]{3}\s*-\s*[0-9]{3}\s*-\s*[0-9]{4}\b/',$output,$matches); 

Для получения дополнительной информации http://www.php.net/manual/en/regexp.reference.repetition.php

используйте это регулярное выражение \d{3}-\d{3}-\d{4}