preg_match_all - regex para encontrar URLs completos na string

Passei mais de 4 horas tentando encontrar um padrão regex para o meu código php sem sorte.

Eu tenho uma string com código html. Tem muitos formatos de URLs como:

site*com
http://site*com
http://www*site*com
http://site*com/some.php
http://site*om/some.php?var1=1
http://site*com/some.php?var1=1&var2=2
etc.

Eu tenho o seguinte código php trabalhando em parte:

preg_match_all('/\b(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)[-A-Z0-9+&@#\/%=~_|$?!:,.]*[A-Z0-9+&@#\/%=~_|$]/i', $content, $result, PREG_PATTERN_ORDER);

A única coisa de que preciso é também capturar URLs com várias cadeias de consulta usando "&" eu as recebo, mas não na íntegra, só recebo coisas como:

http://site*com/asdad.php?var1=1&

(observe, substitua * por. Não posso postar links)

A esquerda está perdida.

Alguém pode me ajudar a adicionar a peça perdida ao padrão?

Muito obrigado antecipadamente.

questionAnswers(2)

yourAnswerToTheQuestion