php正则表达式从giphy获取gif id

时间:2016-03-26 22:47:21

标签: php regex

我想要一个php正则表达式从这些中提取id(VmzI60RQG0fuw)

http://i.giphy.com/VmzI60RQG0fuw.gif
https://media.giphy.com/media/VmzI60RQG0fuw/giphy.gif
http://giphy.com/gifs/VmzI60RQG0fuw
http://giphy.com/gifs/music-videos-mariah-carey-dreamlover-VmzI60RQG0fuw

我对此进行了测试,但它不适用于3概率

preg_match('~(media\.giphy\.com/media/([^ /]+)/giphy\.gif|i.giphy.com/([^ /]+).gif)~i', $this->url, $matches) 

1 个答案:

答案 0 :(得分:2)

这是一个应该有效的方法:

'~https?://(?|media\.giphy\.com/media/([^ /]+)/giphy\.gif|i\.giphy\.com/([^ /]+)\.gif|giphy\.com/gifs/(?:.*-)?([^ /]+))~i'

请参阅regex demo

第三种选择是giphy\.com/gifs/(?:.*-)?([^ /]+)

  • giphy\.com/gifs/ - 子路径giphy.com/gifs/
  • (?:.*-)? - (可选组,由于(?:...)?构造,文本可能会丢失)匹配到最后-的所有字符(也许,替换使用\S*-[^\s/]*-可以使其更精确一些)
  • ([^ /]+) - 匹配并捕获ID(空格和/以外的一个或多个字符)。

由于它适用于PHP,您还可以使用分支重置((?|...|...)),以便所有捕获的组可以拥有一个相同的ID#1。