这是我用来从 Twitter 状态中提取链接的正则表达式之一。
链接匹配模式
(?:<\w+.*?>|[^=!:'"/]|^)((?:https?://|www\.)[-\w]+(?:\.[-\w]+)*(?::\d+)?(?:/(?:(?:[~\w\+%-]|(?:[,.;@:][^\s$]))+)?)*(?:\?[\w\+%&=.;:-]+)?(?:\#[\w\-\.]*)?)(?:\p{P}|\s|<|$)
或者,如果您控制从 Twitter 获取状态的方式,则可以传递include_entities
参数为状态/显示 http://dev.twitter.com/doc/get/statuses/show/%3aid(或任何其他支持它的方法,例如状态/用户时间线 http://dev.twitter.com/doc/get/statuses/user_timeline)让 Twitter 为您分解链接、提及和主题标签,如下所示:
http://api.twitter.com/1/statuses/show/23918022347456512.json?include_entities=true http://api.twitter.com/1/statuses/show/23918022347456512.json?include_entities=true
在生成的 JSON 中,请注意entities object.
"entities":{"urls":[{"expanded_url":null,"indices":[27,53],"url":"http:\/\/tinyurl.com\/38wp7nt"}],"hashtags":[],"user_mentions":[]}
现在,您可以引用从 Twitter 返回的数据,而不必自己解析。这种方法的最大好处是您可以将工作转移到 Twitter,并且永远不必担心您的正则表达式是否与 Twitter 的完全匹配。