Вот одно из регулярных выражений, которое я использовал для получения ссылок из статусов Twitter.
Шаблон соответствия ссылок
(?:<\w+.*?>|[^=!:'"/]|^)((?:https?://|www\.)[-\w]+(?:\.[-\w]+)*(?::\d+)?(?:/(?:(?:[~\w\+%-]|(?:[,.;@:][^\s$]))+)?)*(?:\?[\w\+%&=.;:-]+)?(?:\#[\w\-\.]*)?)(?:\p{P}|\s|<|$)
В качестве альтернативы, если вы контролируете, как статусы выбираются из Twitter, вы можете передать параметр include_entities
в statuses / show (или любой другой метод, который его поддерживает, например statuses / user_timeline ) чтобы Твиттер выделил для вас ссылки, упоминания и хэштеги, например:
http://api.twitter.com/1/statuses/show/23918022347456512.json?include_entities=true
В полученном JSON обратите внимание на объект сущностей .
"entities":{"urls":[{"expanded_url":null,"indices":[27,53],"url":"http:\/\/tinyurl.com\/38wp7nt"}],"hashtags":[],"user_mentions":[]}
Теперь вы можете ссылаться на данные, возвращенные из Twitter, вместо того, чтобы анализировать их самостоятельно. Преимущества этого подхода в том, что вы переносите работу в Twitter, и вам никогда не придется беспокоиться о том, будет ли ваше регулярное выражение точно соответствовать Twitter.