2017-09-04 26 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'); 

にこのラインを持っており、これは、両方の出力であり、これはtrueを返していると、それはのように動作しますので、それを適切な方法を書く方法をなぜ疑問がある

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!" 

var_dumpsそうすべき?

/|google... 

意味しません:あなたのパターンの開始は、空の文字列と一致しているので

答えて

1

このパターンは無効です。左辺が空であるため正規表現は何でもマッチします。

さらに、最後のオルタネータの右側にある^$も空の文字列一致を意味します。

Debuggex Demo

+0

^$も削除する必要がありますか? –

+0

はい、実際には、debuggexのように見えますが、これら2つの文字はまったくマッチングに参加しないので、空の文字列と一致しません。いずれにせよ、彼らは役に立たない。 – SirDarius

5

はこれがあることを意味

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

:何やGoogleを...

+0

OMG、あなたは正しいです...あなたに親切先生ありがとうございました! –

関連する問題