Par preg_match_all par défaut() utilise PREG_PATTERN_ORDER drapeau, ce qui signifie:
Ordres résultats de sorte que $ matches [0] est un tableau complet de modèle correspond, $ correspond 1 est un tableau de chaînes apparié par le premier sous-masque entre parenthèses, et ainsi de suite.
Voir http://php.net/preg_match_all
Voici un exemple de sortie:
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 => ...
),
...
)
Alors, comme R. Hill a répondu, vous avez besoin $ matches [0] pour accéder à toutes les urls correspondants. Et comme budinov.com pointu, vous devez supprimer entre parenthèses externes pour éviter deuxième match en double première, .: par exemple
preg_match_all('~https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?~', $content, $turls);
// where $turls[0] is what you need
Que votre 'print_r (turls $)' imprimer? – BoltClock
$ content est en fait file_get_contents ("http://www.yahoo.com"); et donc preg_match_all extrait les liens de yahoo.com et il est stocké dans le tableau $ turls – Rajasekar