По умолчанию preg_match_all() использует PREG_PATTERN_ORDER флаг, что означает:
упорядочивает результаты так, что $ матчей [0] массив полного шаблона совпадает, соответствуют 1 $ представляет собой массив строк соответствует первой скобке подкоманды и т. Д.
См http://php.net/preg_match_all
Вот пример вывода:
array(
0 => array(// Full pattern matches
0 => 'http://www.w3.org/TR/html4/strict.dtd',
1 => ...
),
1 => array(// First parenthesized subpattern.
// In your case it is the same as full pattern, because first
// parenthesized subpattern includes all pattern :-)
0 => 'http://www.w3.org/TR/html4/strict.dtd',
1 => ...
),
2 => array(// Second parenthesized subpattern.
0 => 'www.w3.org',
1 => ...
),
...
)
Итак, как R. Hill ответил, что вам нужно $ матчей [0], чтобы получить доступ ко всем совпавшие URLs. И как budinov.com заостренный, вы должны удалить внешние скобки, чтобы избежать второго матча дублировать первый, например .:
preg_match_all('~https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?~', $content, $turls);
// where $turls[0] is what you need
Что делает ваш 'print_r ($ turls)' печать? – BoltClock
$ content - фактически file_get_contents («http://www.yahoo.com»); и поэтому preg_match_all извлекает ссылки с yahoo.com и хранится в массиве $ turls – Rajasekar