2011-04-19 68 views
1

我有这样的preg_match规则:的preg_match问题

preg_match('#(http:\/\/(www.)?imgur.com)\/(gallery\/)?(([-|~_0-9A-Za-z]+)&?.*?)#i', $link, $matches) 

这场比赛对于

http://imgur.com/xxxx 
http://www.imgur.com/xxxx 
http://imgur.com/gallery/xxxx 

我怎么能避免以配合imgur.com/a/xxxx#xxxx

+0

什么不应该匹配? '/ a /'? '#xxxx'?都?只有一起或独立? – 2011-04-19 00:11:42

+0

将匹配所有之前,只是为了避免/ a/ – greenbandit 2011-04-19 00:13:57

+0

你匹配的字符串或试图找到它在另一个字符串?它似乎是前... – alex 2011-04-19 00:24:43

回答

2

我不知道这是否是你想要什么:

preg_match('#(http:\/\/(www.)?imgur.com)\/(?!a)(gallery\/)?(([-|~_0-9A-Za-z]+)&?.*?)#i', $link, $matches) 

这个网址像http://imgur.com/a/xxxxxx将不匹配。 PS:虽然根据你在做什么,我认为正则表达式可能会变得不必要的复杂,你应该尝试找到更简单的方法。看看我在这里解答网址的答案:Would a regular expression be best for this problem?

+0

这个作品,谢谢。 – greenbandit 2011-04-19 00:42:00

0

您可以检测到这些URL,然后将它们传递给parse_url(),如果它们包含该路径,则可以将它们从匹配中取消设置。

可能会更容易阅读:)

+0

好主意,我即将去尝试。 ^^ – greenbandit 2011-04-19 00:41:16