У меня есть небольшая проблема с моим регулярным выражением, которое я использую для извлечения телефонных номеров из сильного
<?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}