1

Webクローラー/スパイダーの可能性があるユーザーエージェント文字列をチェックするために使用される preg_match() で使用するかなり単純な正規表現を作成しようとしています。

たとえば、現在、次のようなものを使用しています。

preg_match("/(bot|search|web|slurp|crawl)/i")

これは、「googlebot」や「webcrawler」などを含むユーザー エージェントとうまく一致しているようです。

ただし、私が抱えている問題は、ユーザー エージェントに「webkit」のような一般的なものが含まれている場合にも一致することです。

「webkit」などの特定の単語が一致しないようにするには、どのような変更が必要ですか? 私は正規表現についてほとんど理解しておらず、他の質問への回答に基づいてさまざまな組み合わせを試すのに何時間も費やしましたが、これまでのところ成功していません.

事前に多くの感謝:)

4

1 に答える 1

0

特定の単語リストを除外するには、2 つの先読みを組み合わせることができます。

(?!webkit|robot)(?=bot|search|web|slurp|crawl)

どうやら最初の部分は除外リストになります。これは「web」に一致しますが、「webkit」には一致しません

構文に関する小さなメモ。(?!regex) は否定先読みで、(?=regex) は肯定先読み (消費しない正規表現) です。詳細については、こちらをご覧ください。要するに、先読みは「正規表現 expr に一致しますが、その後は元の一致点で一致を継続する」ことを意味します。

于 2013-08-26T02:01:29.583 に答える