faire correspondre le modèle d'URL dans PHP en utilisant une expression régulière

Je veux correspondre à un lien url dans un message sur le mur et de remplacer ce lien avec la balise d'ancrage, pour cela, j'utilise l'expression régulière ci-dessous.

Je voudrais le match 4 types d'url:

  1. http://example.com
  2. https://example.com
  3. www.example.com
  4. example.com
preg_replace('@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@',
             '<a href="$1">$1</a>', $subject);

Cette expression correspond uniquement aux deux premiers types d'url.

Si j'utilise cette expression pour le match de modèle d'url
'@(www?([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@'alors il ne correspond au troisième type de modèle d'url.

Comment puis-je correspondre à tous les quatre type de modèle d'url avec une seule expression régulière?

source d'informationauteur Seema