2013-04-12 31 views
-3

任何想法为什么这个正则表达式不工作?如何使用正则表达式排除YouTube链接?

'#((http://|www.)(.*^(youtube)\.(com|org|co.il|net|us|ws|info|tv|me|tk|co.uk).*))#' 

我想找到不属于YouTube的链接。

+1

为什么不[解析URL](http://php.net/manual/en /function.parse-url.php)并从“PHP_URL_HOST”中检查[二级域名](http://en.wikipedia.org/wiki/Second-level_domain)?我建议不要为自己创建[2个问题](http://www.codinghorror.com/blog/2008/06/regular-expressions-now-you-have-two-problems.html)。 – Joe

回答

2

你有这个段在您正则表达式:^(youtube)

请理解这不会否定串youtube

您需要负超前或回顾后否定匹配这样的文字:

(?!youtube) 

OR

(?<!youtube) 

为了您的正则表达式,可以这样:

#((http://|www.)((?!youtube)[^.]+\.(com|org|co.il|net|us|ws|info|tv|me|tk|co.uk).*))# 

但是你需要在你的问题中提供你的输入字符串的样本。

+0

那么我该怎么做呢..... – user2275812

+0

谢谢!作品! (?<!youtube) – user2275812

+0

如果这个答案对你有用,那么你可以通过点击这个答案旁边的勾号将它标记为已接受? – anubhava

0

我会走向相反的方向

$youtubePattern = '%(https?:\/\/(www\.)?youtube\.([a-z]{2,3}).*)%six'; 

if (!preg_match($youtubePattern, $subject)) { 
    // not youtube, do whatever... 
}