2017-10-20 62 views
-1

我需要preg_match指向imgur.com服务的链接。 因此,我的代码是:Preg matching imgur.com链接

if (!preg_match("/(http|https)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3} 
(\/\$_POST['request'])) { ... } 

如何使它只与这些链接一起工作?

http://imgur.com/aBc1 
    https://imgur.com/a/aBc1 
http://www.imgur.com/a/aBc1 
    https://www.imgur.com/a/aBc1 
http://imgur.com/gallery/aBc1 
    https://imgur.com/gallery/aBc1 
http://i.imgur.com/aBc1.png(.jpg,.jpeg,.gif) 
    https://i.imgur.com/aBc1.png(.jpg,.jpeg,.gif) 
+0

你关心的所有捕获组?意思是说,你想访问URL中的任何值吗?或者你只需​​要知道它是或不是一个imgur网址? –

+0

@PatrickQ,最后一个。 –

回答

1

这应该这样做:

/(http|https)\:\/\/[a-z]{0,4}[\.]*imgur+\.[a-zA-Z]{2,3}\/[a-zA-Z0-9]+(\/)*[a-zA-Z0-9]*[\.]*(jpg|png|jpeg|gif)*/g 
  • (http|https):在URL检查httphttps
  • [a-z\.]{0,4}:检查www./i.
  • (jpg|png|jpeg|gif)*检测到您给出的格式(如果有的话)

现场演示here

+0

不工作,最后是“g”还是需要的? –

+0

好吧,删除“g”,工作。 –

1

此模式将匹配所有你提供

/http(s)?\:\/\/(.*\.)?imgur.com\/.*/ 

解释URL的:

  • http匹配文字字符 'HTTP'
  • (s)?可选最多匹配'
  • \:\/\/匹配文字字符“://”
  • (.*\.)?任选地匹配的任意字符后跟一个句点/点的任何量
  • imgur.com\/匹配“imgur.com/”
  • .*匹配任何数目的任何附加的字符

DEMO

+0

非常感谢,哥们 –