12 Stimmen

Regexp, der die User-Agents von Endnutzer-Browsern, aber NICHT von Crawlern mit >90 % Genauigkeit abgleicht

Ich versuche, eine Regexp zu konstruieren, die wahr für User-Agent :s von "von Menschen navigierten Browsern", aber falsch für Bots. Natürlich wird der Abgleich nicht exakt sein, aber wenn er in etwa 90 % der Fälle richtig ist, ist das mehr als gut genug.

Mein bisheriger Ansatz besteht darin, die User-Agent String der fünf wichtigsten Desktop-Browser (MSIE, Firefox, Chrome, Safari, Opera). Konkret möchte ich die Regexp NO um festzustellen, ob der Benutzer-Agent ein Bot ist (Googlebot, msnbot usw.).

Derzeit verwende ich die folgende Regexp, die die gewünschte Präzision zu erreichen scheint:

^(Mozilla.*(Gecko|KHTML|MSIE|Presto|Trident)|Opera).*$

Ich habe eine kleine Anzahl falscher Negativmeldungen beobachtet, bei denen es sich meist um mobile Browser handelt. Die Ausnahmen stimmen alle überein:

(BlackBerry|HTC|LG|MOT|Nokia|NOKIAN|PLAYSTATION|PSP|SAMSUNG|SonyEricsson)

Meine Frage ist: Wie würden Sie die Regexp angesichts des gewünschten Genauigkeitsgrads verbessern? Fallen Ihnen bei der gegebenen Regexp wesentliche falsch-positive oder falsch-negative Ergebnisse ein?

Bitte beachten Sie, dass sich die Frage speziell auf regexp-basierte User-Agent passend. Es gibt noch eine Reihe anderer Ansätze zur Lösung dieses Problems, die aber nicht in den Rahmen dieser Frage fallen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X