我想要一个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)
答案 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。