Ruby中提取无冒号短链接(swoo.sh)的正则实现方法
提取推文里的swoo.sh短链方案
刚好碰到过一模一样的问题!URI::extract()确实对这种不带协议的短链束手无策,正则是最靠谱的解决办法。
核心正则表达式
针对你需要的swoo.sh/xxx格式,直接用这个正则就可以精准匹配:
/\bswoo\.sh\/\S+/
拆解一下每个部分的作用:
\b:单词边界,确保匹配的是独立的短链,不会把类似abcswoo.sh/123这种带前缀的错误内容也抓进来swoo\.sh:匹配短链域名,把.转义成\.是因为正则里.代表任意字符,必须转义才能精准匹配域名里的点\/:转义后的斜杠,匹配域名后的路径分隔符\S+:匹配所有非空白字符,也就是斜杠后面的所有内容(直到遇到空格或文本结尾),完美适配推文里短链和文字用空格分隔的格式
PHP代码示例
既然你提到了URI::extract(),应该是在PHP环境下处理,给你写个可直接复用的代码片段:
// 你的推文内容 $tweet = "Lorem ipsum lorem ipsum swoo.sh/12xfsW lorem ipsum"; // 提取所有符合格式的短链(支持多条) preg_match_all('/\bswoo\.sh\/\S+/', $tweet, $matches); // 提取到的链接会存在$matches[0]数组中 $extractedLinks = $matches[0]; // 输出结果示例:Array ( [0] => swoo.sh/12xfsW ) print_r($extractedLinks);
运行后$extractedLinks里就会包含完整的swoo.sh/12xfsW,完全符合你的需求。
如果之后要支持其他类似短链(比如t.co、bit.ly),只需要把正则里的swoo\.sh改成(swoo\.sh|t\.co|bit\.ly)这种分组格式就行,非常灵活。
内容的提问来源于stack exchange,提问作者evan
相关产品推荐
相关产品推荐

