2017-09-04 65 views
0

由於正則表達式不是我最好的一面,我需要你們的幫助。所以我有這個線在我的PHP代碼爲什麼這個正則表達式返回true?

var_dump($_SERVER['HTTP_USER_AGENT']); 
if(preg_match('/|google|robot|bot|spider|crawler|curl|Facebot|facebook|archiver|^$/i', $_SERVER['HTTP_USER_AGENT'])) { 
    var_dump('returning true!'); 
    return true; 
} 
die('end'); 

這是兩者的輸出var_dumps

string(121) "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36" 

string(15) "returning true!" 

的問題是,這是爲什麼返回true,以及如何把它寫有道所以它會工作這應該?

回答

1

這種模式是無效的:

|google|robot|bot|spider|crawler|curl|Facebot|facebook|archiver|^$ 
^ 
| 
+--- this character (an alternator) effectively renders the regex useless 

這意味着,正則表達式理論上可以匹配任何東西,因爲左邊部分是空的。

此外,最後一個交流發電機右側的^$也意味着一個空字符串匹配。

Debuggex Demo

+0

所以我也應該刪除^ $? –

+0

確實,雖然它看起來像在debuggex上,但這兩個字符完全不參與匹配,因此它們不匹配空字符串。無論哪種方式,他們是無用的。 – SirDarius

5

因爲你的模式的開始空字符串匹配:

/|google... 

這意味着:沒有或谷歌......

+0

omg,你是對的...謝謝你親切的先生! –

相關問題