2013-04-12 28 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... 
}