2012-07-30 169 views
2

我知道這個問題已經被問了很多次,但我似乎無法得到這個工作。正則表達式:不包含

我試圖用正則表達式找到任何Facebook的網址,的比賽,但沒有 URL包含「插件/像」(如「http://www.facebook.com/plugins/like 「)

我拿出下面,我不明白爲什麼它不工作:

https?://(www)?\.facebook\.[a-zA-Z]{2,4}/((?!plugins/like).) 

我是不是做一個很明顯的錯誤?對不起,如果它沒有任何意義,但我只在過去五個月嘗試在PHP的手。

非常感謝您的時間和您的幫助。

編輯: 我得到匹配任何FB URL到目前爲止,但不排除任何含有插件/像

+2

嘗試移動第一個'\ .'到'(WWW)'塊的解決方案?;如果它在後面,它將匹配'http://。facebook.com' - 如果您正在使用http:// facebook.com的示例網址進行測試,則會失敗。 – newfurniturey 2012-07-30 12:52:58

+1

你看過facebook.co.uk Dave嗎? – Pete 2012-07-30 12:53:01

+0

嘗試'!https?\://(www \。)?facebook \。[a-z] {2,4} /((?!plugins/like)。*)!i' – 2012-07-30 12:53:32

回答

2
$urls = array(
    'http://www.facebook.com/', 
    'https://facebook.com/plugins/foo', 
    'http://facebook.ru/plugins/like', 
); 

$pattern = '#^https?://(www\.)?facebook\.[a-z]{2,4}/(?!plugins/like)#'; 

foreach ($urls as $url) { 
    echo preg_match($pattern, $url) . PHP_EOL; 
} 

好嗎?

+0

我認爲這可能是最後一個捕獲組與它搞砸了,但因爲它在那裏我想象OP想要捕獲路徑部分。儘管[this](http://viper-7.com/eJRrjf)會對該部分進行排序,並且必要時可以修剪前導斜槓。 – DaveRandom 2012-07-30 13:04:37

+0

稍有偏離主題,但我一直想知道OP代表什麼... – AKG 2012-07-30 13:05:35

+0

原創海報 – Pete 2012-07-30 13:06:22

0

你忘了在圖案esacpe特殊字符。字符如:和/必須跟在反斜槓之後。

https?\:\/\/(www)?\.facebook\.[a-zA-Z]{2,4}\/((?!plugins\/like).) 
+0

'//'在正則表達式中不是特殊字符,不需要轉義。除非您在PCRE中將它用作分隔符,但如果您有更明智的選擇,爲什麼要這麼做呢? – Joey 2012-07-30 12:52:42

+0

這是在PHP中,我只是測試它(PHP是問題中的標籤之一)。 – Summoner 2012-07-30 12:53:13

+0

Forwardslashes需要轉義? – AKG 2012-07-30 12:53:59

0

一切都很好,你的重新(它的工作原理;我檢查)。我會改變的唯一的事情是寫

(?!.*plugins/like) 

而不是(?!plugins/like).。那是pluginsfacebook.com/之後不直接的情況。

1

這裏是使用strpos()

$url = 'http://www.facebook.com/test/plugins/like?somestuff'; 

$matches = array(); 

if(preg_match('#^https?://(?:www)?\.facebook\.[a-zA-Z]{2,4}/(.*)$#', $url, $matches) 
    && strpos($matches[1], "plugins/like") === false) { 
    // ok 
} else { 
    // nope 
}