Получить все URL-адреса в строке с php

Я пытаюсь выяснить способ получения массива URL-адресов из строки текста. Текст будет отформатирован следующим образом:

Некоторые случайные тексты здесь

http://techcrunch.com/2012/07/20/kickstarter-flashr-wants-to-make-the-iphones-bezel-a-massive-notification-light/?grcc=88888Z0ZwdgtZ0Z0Z0Z0Z0&grcc2=835637c33f965e6cdd34c87219233711~1342828462249~fca4fa8af1286d8a77f26033fdeed202~510f37324b14c50a5e9121f955fac3fa ~ 1342747216490 ~ 0 ~ 0 ~ 0 ~ 0 ~ 0 ~ 0 ~ 0 ~ 0 ~ 7 ~ 3 ~

Last Day To Purchase Extra Early Bird Tickets For Disrupt SF

Очевидно, что эти ссылки могут быть любыми (и может быть много ссылок, это те, которые я тестирую сейчас. Если я использую простой URL, например, мое регулярное выражение работает нормально.

Я использую:

preg_match_all('((https?|ftp|gopher|telnet|file|notes|ms-help):'. '((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)', $bodyMessage, $matches, PREG_PATTERN_ORDER); 

Когда я делаю print_r( $matches); я получаю:

 Array ( [0] => Array ( [0] => http://techcrunch.com/2012/07/20/kickstarter-flashr-wants-to-make-the-iphon= [1] => http://techcrunch.com/2012/07/20/last-day-to-purchase-extra-early-bird-tick= [2] => http://techcrunch.co= [3] => http://techcrunch.com/2012/07/20/kickstarter-flashr-wants-to-make-the-ip= [4] => http://techcrunch.com/2012/07/20/last-day-to-purc= [5] => http://tec= ) ... 

Ни один из этих элементов в этом массиве не содержит полных ссылок из приведенных выше ссылок.

Кто-нибудь знает хороший способ получить то, что мне нужно? Я нашел кучу ресурсов регулярных выражений, чтобы получить ссылки на PHP, но ничто из этого не работает.

Благодаря!

Редактировать:

Хорошо, поэтому я потянул эти ссылки с электронной почты. Скрипт анализирует электронную почту, захватывает тело сообщения, а затем пытается схватить ссылки из этого. После изучения электронной почты кажется, что это почему-то добавляет пробел в середине URL-адреса. Вот результат сообщения body, как видно из моего PHP-скрипта.

  --00248c711bb99ca36d04c54ba5c6 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable http://techcrunch.com/2012/07/20/kickstarter-flashr-wants-to-make-the-iphon= es-bezel-a-massive-notification-light/?grcc=3D88888Z0ZwdgtZ0Z0Z0Z0Z0&grcc2= =3D835637c33f965e6cdd34c87219233711~1342828462249~fca4fa8af1286d8a77f26033f= deed202~510f37324b14c50a5e9121f955fac3fa~1342747216490~0~0~0~0~0~0~0~0~7~3~ http://techcrunch.com/2012/07/20/last-day-to-purchase-extra-early-bird-tick= ets-for-disrupt-sf/ --00248c711bb99ca36d04c54ba5c6 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable 

Любые предложения о том, как сделать это, не нарушают URLS?

EDIT 2

По предложению Лаурнета я запустил этот код:

  $bodyMessage = str_replace("= ", "",$bodyMessage); 

Однако, когда я повторяю это, он, похоже, не хочет заменять «=»,

  --00248c711bb99ca36d04c54ba5c6 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable http://techcrunch.com/2012/07/20/kickstarter-flashr-wants-to-make-the-iphon= es-bezel-a-massive-notification-light/?grcc=3D88888Z0ZwdgtZ0Z0Z0Z0Z0&grcc2= =3D835637c33f965e6cdd34c87219233711~1342828462249~fca4fa8af1286d8a77f26033f= deed202~510f37324b14c50a5e9121f955fac3fa~1342747216490~0~0~0~0~0~0~0~0~7~3~ http://techcrunch.com/2012/07/20/last-day-to-purchase-extra-early-bird-tick= ets-for-disrupt-sf/ --00248c711bb99ca36d04c54ba5c6 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable 

  /** * * @get URLs from string (string maybe a url) * * @param string $string * @return array * */ function getUrls($string) { $regex = '/https?\:\/\/[^\" ]+/i'; preg_match_all($regex, $string, $matches); //return (array_reverse($matches[0])); return ($matches[0]); } 

Вместо этого используйте следующее регулярное выражение.

 $regex = "(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][az]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\".,<>?«»“”'']))"; 

Надеюсь, поможет.